2024.1.19 寒假训练记录(2)

昨晚的cf打得非常抽象,成功从蓝掉到青,不过在心理预期范围内,可以接受,之后每一场都会跟着打大号,能力的提升比表面上的分数更加重要

文章目录

  • CF 1922A Tricky Template
  • CF 1922B Forming Triangles
  • CF 1922C Closest Cities
  • CF 1922D Berserk Monsters
  • CF 1805A We Need the Zero
  • CF 1805B The String Has a Target
  • CF 1805C Place for a Selfie
  • CF 1805D A Wide, Wide Graph

CF 1922A Tricky Template

题目链接

太久没训了读题能力飞速下滑,昨晚愣是看了好久才看明白题目是啥意思,加上大脑停转最后写了个抽象的模拟

#include <bits/stdc++.h>using namespace std;#define int long longusing i64 = long long;typedef pair<int, int> PII;void solve()
{int n; cin >> n;string a, b, c;cin >> a >> b >> c;if (a == c || b == c){cout << "NO\n";return;}string ans = "";for (int i = 0; i < n; i ++ ){if (a[i] == b[i]) ans += a[i];else{if (a[i] != c[i] && b[i] != c[i]) ans += c[i] - 'a' + 'A';else ans += "!";}}bool flag = true;for (int i = 0; i < n; i ++ ){if (ans[i] - 'a' < 0){ans[i] = 'a' + ans[i] - 'A';if (ans[i] == c[i]){cout << "YES\n";return;}}else{if (ans[i] != c[i]){cout << "YES\n";return;}}}cout << "NO\n";
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1922B Forming Triangles

题目链接

又是抽象的错误点,没看到二的次方qaq
当较小的两条边是2x和2y时,x<y,那么最大的边一定是2y

#include <bits/stdc++.h>using namespace std;#define int long longusing i64 = long long;typedef pair<int, int> PII;void solve()
{int n;cin >> n;vector<int> a(n);map<int, int> mp;for (int i = 0; i < n; i ++ ){cin >> a[i];mp[a[i]] ++ ;}sort(a.begin(), a.end());int ans = 0;mp[a[0]] -- ;for (int i = 1; i < n; i ++ ){mp[a[i]] -- ;ans += mp[a[i]] * i;}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1922C Closest Cities

题目链接

前两题wa太多次导致写这一题开始急了上手就是个Dijkstra,于是成功t了两发,于是反手就是两个Dijkstra,赛后才发现只有相邻的点有边,非常喜欢小题大做的一个人…

#include <bits/stdc++.h>using namespace std;#define int long longusing i64 = long long;typedef pair<int, int> PII;void solve()
{int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i ++ ) cin >> a[i];vector<vector<PII>> g(n);g[0].push_back(make_pair(1, 1));g[n - 1].push_back(make_pair(n - 2, 1));for (int i = 1; i < n - 1; i ++ ){int tmp1 = abs(a[i] - a[i - 1]);int tmp2 = abs(a[i] - a[i + 1]);if (tmp1 < tmp2){g[i].push_back(make_pair(i - 1, 1));g[i].push_back(make_pair(i + 1, tmp2));}else{g[i].push_back(make_pair(i - 1, tmp1));g[i].push_back(make_pair(i + 1, 1));}}int m;cin >> m;vector<int> dist1(n, 1e9);dist1[0] = 0;priority_queue<PII, vector<PII>, greater<PII>> q;q.push(make_pair(0, 0));vector<bool> std(n);while (q.size()){auto t = q.top();q.pop();int ver = t.second, dd = t.first;if (std[ver]) continue;std[ver] = true;bool flag = false;for (int i = 0; i < g[ver].size(); i ++ ){int j = g[ver][i].first;if (dist1[j] > dist1[ver] + g[ver][i].second){dist1[j] = dist1[ver] + g[ver][i].second;q.push(make_pair(dist1[j], j));}}}vector<int> dist2(n, 1e9);dist2[n - 1] = 0;q.push(make_pair(0, n - 1));for (int i = 0; i < n; i ++ ) std[i] = false;while (q.size()){auto t = q.top();q.pop();int ver = t.second, dd = t.first;if (std[ver]) continue;std[ver] = true;bool flag = false;for (int i = 0; i < g[ver].size(); i ++ ){int j = g[ver][i].first;if (dist2[j] > dist2[ver] + g[ver][i].second){dist2[j] = dist2[ver] + g[ver][i].second;q.push(make_pair(dist2[j], j));}}}while (m -- ){int st, ed;cin >> st >> ed;st -- , ed -- ;if (dist1[ed] - dist1[st] < 0) cout << dist2[ed] - dist2[st] << '\n';else cout << dist1[ed] - dist1[st] << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1922D Berserk Monsters

题目链接

因为如果一个人的旁边两个人不改变的话,他在第一局没有挂,之后就都不会挂,所以我们先进行第一轮判断,之后就只需要判断挂的人旁边的两个人即可

#include <bits/stdc++.h>using namespace std;// #define int long longusing i64 = long long;typedef pair<int, int> PII;void solve()
{int n;cin >> n;vector<int> a(n + 1), d(n + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++ ) cin >> d[i];vector<int> pre(n + 1), nxt(n + 1);for (int i = 1; i <= n; i ++ ) pre[i] = i - 1;for (int i = 1; i <= n; i ++ ) nxt[i] = i + 1;nxt[n] = 0;vector<bool> st(n + 1);vector<int> die;vector<int> vt;for (int i = 1; i <= n; i ++ ) vt.push_back(i);for (int i = 0; i < n; i ++ ){int cnt = 0;for (auto t : vt){if (st[t]) continue;int tmp = d[t];// if (pre[t] && !st[pre[t]]) tmp -= a[pre[t]];// if (nxt[t] && !st[nxt[t]]) tmp -= a[nxt[t]];// if (tmp < 0)if (a[pre[t]] + a[nxt[t]] > d[t]){die.push_back(t);cnt ++ ;st[t] = true;}}vt.clear();for (auto t : die){if (nxt[t]) pre[nxt[t]] = pre[t];if (pre[t]) nxt[pre[t]] = nxt[t];if (!st[pre[t]] && pre[t]) vt.push_back(pre[t]);if (!st[nxt[t]] && nxt[t]) vt.push_back(nxt[t]);}die.clear();cout << cnt << ' ';}cout << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1805A We Need the Zero

题目链接

熟悉位运算的性质:偶数个相同的数xor后是0,奇数个相同的数xor后是本身

#include <bits/stdc++.h>using namespace std;#define int long longusing i64 = long long;
using i128 = __int128_t;typedef pair<int, int> PII;void solve()
{int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i ++ ) cin >> a[i];if (n % 2 == 0){int tmp = 0;for (int i = 0; i < n; i ++ ) tmp ^= a[i];if (tmp == 0) cout << 1 << '\n';else cout << -1 << '\n';}else{int tmp = 0;for (int i = 0; i < n; i ++ ) tmp ^= a[i];cout << tmp << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1805B The String Has a Target

题目链接

记录一下最小字符,挪到最前面就行

#include <bits/stdc++.h>using namespace std;#define int long longusing i64 = long long;
using i128 = __int128_t;typedef pair<int, int> PII;vector<i64> p(65);void solve()
{int n;cin >> n;string s;cin >> s;char minn = 'z' + 1;int pos = -1;for (int i = n - 1; i >= 0; i -- ){if (s[i] < minn){minn = s[i];pos = i;}}if (minn == s[0]){if (pos != 0){cout << minn;for (int i = 0; i < n; i ++ ){if (i != pos) cout << s[i];}}else cout << s;}else{cout << minn;for (int i = 0; i < n; i ++ ){if (i != pos) cout << s[i];}}cout << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1805C Place for a Selfie

题目链接

联立方程看有没有符合条件的解,没有什么坑点

#include <bits/stdc++.h>using namespace std;#define int long longusing i64 = long long;
using i128 = __int128_t;typedef pair<int, int> PII;vector<i64> p(65);void solve()
{int n, m;cin >> n >> m;vector<int> k(n);for (int i = 0; i < n; i ++ ) cin >> k[i];sort(k.begin(), k.end());while (m -- ){int a, b, c;cin >> a >> b >> c;if (c < 0){cout << "NO\n";continue;}double tmp1 = b - 2 * sqrt(a * c);double tmp2 = b + 2 * sqrt(a * c);int pos1 = upper_bound(k.begin(), k.end(), tmp1) - k.begin();int pos2 = lower_bound(k.begin(), k.end(), tmp2) - k.begin() - 1;if (pos1 < 0 && pos2 >= n) cout << "NO\n";else if (pos1 >= 0 && pos1 < n && k[pos1] > tmp1 && k[pos1] < tmp2) cout << "YES\n" << k[pos1] << '\n';else if (pos2 >= 0 && pos2 < n && k[pos2] > tmp1 && k[pos2] < tmp2) cout << "YES\n" << k[pos2] << '\n';else cout << "NO\n";}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t -- ){solve();}
}

CF 1805D A Wide, Wide Graph

题目链接

考点是树的直径,不太熟悉于是补题的时候去学了下,详细内容见另一篇博客

#include <bits/stdc++.h>using namespace std;#define int long longusing i64 = long long;
using i128 = __int128_t;typedef pair<int, int> PII;vector<i64> p(65);void solve()
{int n;cin >> n;vector<vector<int>> g(n + 1);for (int i = 1; i < n; i ++ ){int u, v;cin >> u >> v;g[u].push_back(v), g[v].push_back(u);}int p, q;int c = 0;vector<int> d(n + 1);function<void(int, int)> dfs = [&](int u, int fa){for (int i = 0; i < g[u].size(); i ++ ){int j = g[u][i];if (j == fa) continue;d[j] = d[u] + 1;if (d[j] > d[c]) c = j;dfs(j, u);}};dfs(1, 0);p = c, c = 0;d[p] = 0;dfs(p, 0);q = c;int zj = d[c];vector<int> dist1(n + 1, 0x3f3f3f3f);vector<int> dist2(n + 1, 0x3f3f3f3f);function<void(int, int)> bfs = [&](int start, int idx){if (idx == 1) dist1[start] = 0;if (idx == 2) dist2[start] = 0;priority_queue<PII, vector<PII>, greater<PII>> q;q.push(make_pair(0, start));vector<bool> st(n + 1);while (q.size()){auto t = q.top();q.pop();int dd = t.first, ver = t.second;if (st[ver]) continue;st[ver] = true;for (int i = 0; i < g[ver].size(); i ++ ){int j = g[ver][i];if (idx == 1 && (dist1[j] == -1 || dist1[j] > dist1[ver] + 1)){dist1[j] = dist1[ver] + 1;q.push(make_pair(dist1[j], j));}else if (idx == 2 && dist2[j] > dist2[ver] + 1){dist2[j] = dist2[ver] + 1;q.push(make_pair(dist2[j], j));}}}};bfs(p, 1);bfs(q, 2);vector<int> dist(n + 1);for (int i = 1; i <= n; i ++ ) dist[i] = max(dist1[i], dist2[i]);dist[p] = dist[q] = 0;sort(dist.begin(), dist.end());for (int i = 1; i <= n; i ++ ){int cnt = lower_bound(dist.begin(), dist.end(), i) - dist.begin();if (zj < i) cnt -- ;else cnt -= 2;cout << cnt << ' ';}cout << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t -- ){solve();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试之Glide如何绑定Activity的生命周期

Glide绑定Activity生命周期 Glide.with() 下面都是它的重载方法&#xff0c;Context&#xff0c;Activity&#xff0c;FragmentActivity, Fragment, android.app.Fragment fragment,View都可以作为他的参数&#xff0c;内容大同小异&#xff0c;都是先getRetriever&#xff0…

2649. 嵌套数组生成器

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 现给定一个整数的 多维数组 &#xff0c;请你返回一个生成器对象&#xff0c;按照 中序遍历…

01 软件工程项目开发流程-需求调研

一、需求调研 获取到客户项目需求后&#xff0c;首先进行项目需求调研&#xff0c;调研项目的业务需求、用户需求、系统需求、性能需求、非功能需求、约束和限制、需求优先级等&#xff0c;具体如下&#xff1a; 业务需求&#xff1a;了解客户的业务目标和战略&#xff0c;这是…

016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、vue编写一个完成页面、Vue路由、vue打包部署到nginx

第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发&#xff1a;传统开发模式 前后端分离开发&#xff1a;当前最为主流的开发模式 页面原型需求案例&#xff1a;分析出接口文档 离线开发文档示例&#xff1a; 2、YAPI&#xff08;官网已停用&#xff09; 202…

汽车微电机行业研究:预计2029年将达到188亿美元

微电机行业是技术密集型行业&#xff0c;其起源于欧洲的德国、瑞士等国家&#xff0c;发展于日本。随着改革开放&#xff0c;中国作为发展中国家&#xff0c;承接了德国、日本等发达国家的汽车微电机产业转移&#xff0c;技术扩散逐步向我国转移。 微特电机广泛应用于信息处理设…

优化微信小程序更新体验:异步更新与强制更新方案解析

在微信小程序的开发和迭代过程中&#xff0c;新版本覆盖率的问题一直备受关注。由于小程序采用异步更新机制&#xff0c;在用户首次打开或冷启动时才会检查并下载新版本&#xff0c;导致部分用户无法及时应用上最新版本。为了解决这一问题&#xff0c;微信团队经过深入研究和讨…

【JavaScript】面向对象之多态

重学JavaScript07----- 面向对象之多态 文章目录 重学JavaScript07----- 面向对象之多态多态 多态 面向对象的三大特性&#xff1a;封装、继承、多态。 JavaScript有多态吗&#xff1f; 维基百科对多态的定义&#xff1a;多态&#xff08;英语&#xff1a;polymorphism&#…

QML与C++交互详解

文章目录 介绍一. QML中创建C对象二. QML与C的交互结论 介绍 在现代软件开发中&#xff0c;图形用户界面&#xff08;GUI&#xff09;是用户与程序交互的重要组成部分。Qt框架提供了一种强大的方式来构建跨平台的GUI应用程序&#xff0c;其中QML&#xff08;Qt Meta-Object La…

C语言中的递归过程和递归工作栈

递归过程和关联的递归工作堆栈的示例&#xff1a; c #include <stdio.h> int factorial(int n) { if (n 0) return 1; else return n * factorial(n - 1); } int main() { int result factorial(5); printf("Factorial: %d\n", result); return 0; } 在这…

vue解决部署文件缓存方式

问题&#xff1a;系统上线后&#xff0c;除了bug。紧急修复后&#xff0c;发现安卓正常&#xff0c;ios上海市有问题。通过debug后发现&#xff0c;ios上缓存严重。于是想到了打包文件加时间戳的方式来去除缓存。 vue2 配置打包输出文件名方式&#xff1a; const baseUrl &qu…

【Java 设计模式】结构型之组合模式

文章目录 1. 定义2. 应用场景3. 代码实现结语 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以统一处理单个对象和对象组合&#xff0c;无需区分它们之间…

设计社交网络的数据结构

1: 确定 Use Case 和 约束 Use Cases User 搜索某人然后看到被搜索人的最短路径Service 有高可用 约束和假设 状态假设 Traffic 不是平均分布的 一些被搜索者是更加受欢迎的&#xff0c;某些被搜索者只会被搜索一次图数据不适用与单个机器图的分布是轻量级的一亿个 User每…

canvas绘制N角形,锯齿状

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

C++入门【31-C++ 基本的输入输出】

C 标准库提供了一组丰富的输入/输出功能&#xff0c;我们将在后续的章节进行介绍。本章将讨论 C 编程中最基本和最常见的 I/O 操作。 C 的 I/O 发生在流中&#xff0c;流是字节序列。如果字节流是从设备&#xff08;如键盘、磁盘驱动器、网络连接等&#xff09;流向内存&#…

【Python 千题 —— 基础篇】姓名与性别

题目描述 题目描述 姓名与学号。班级中有 Tom、Alan、Bob、Candy、Sandy 五个人,他们的性别分别是男、男、男、女、女;请将他们的姓名与性别关联成字典,转换成字符串并输出。 输入描述 无 输出描述 输出字典转换成的字符串。 示例 示例 ① 输出: {Tom: 男, Alan:…

在线扒站网PHP源码-在线扒站工具网站源码

源码介绍 这是一款在线的网站模板下载程序&#xff0c;也就是我们常说的扒站工具&#xff0c;利用它我们可以很轻松的将别人的网站模板样式下载下来&#xff0c;这样就可以大大提高我们编写前端的速度了&#xff01;注&#xff1a;扒取的任何站点不得用于商业、违法用途&#…

kafka参数配置参考和优化建议 —— 筑梦之路

对于Kafka的优化&#xff0c;可以从以下几个方面进行思考和优化&#xff1a; 硬件优化&#xff1a;使用高性能的硬件设备&#xff0c;包括高速磁盘、大内存和高性能网络设备&#xff0c;以提高Kafka集群的整体性能。 配置优化&#xff1a;调整Kafka的配置参数&#xff0c;包括…

免费的爬虫软件【2024最新】

在国际市场竞争日益激烈的背景下&#xff0c;国外网站的SEO排名直接关系到网站在搜索引擎中的曝光度和用户点击量。良好的SEO排名能够带来更多的有针对性的流量&#xff0c;提升网站的知名度和竞争力。 二、国外网站SEO排名的三种方法 关键词优化&#xff1a; 关键词优化是SEO…

Red Hat Enterprise Linux 9.3 安装图解

引导和开始安装 选择倒计时结束前&#xff0c;通过键盘上下键选择下图框选项&#xff0c;启动图形化安装过程。需要注意的不同主板默认或者自行配置的固件类型不一致&#xff0c;引导界面有所不同。也就是说使用UEFI和BIOS的安装引导界面是不同的&#xff0c;如图所示。若手动调…

ITK + ANT,无法显示三维

背景&#xff1a;之前用ANT保存ima格式的数据&#xff0c;选择的是保存所有的序列 用python将dicom转为nii的格式&#xff0c; import nibabel as nib import torch"""不管是nii还是nii.gz都是二维的&#xff0c;为啥呢"""fobj nib.load("…