题解:CF contest 2037 : [Codeforces Round 988 (Div. 3)] (A-E)
A Twice
题面
Kinich 醒来迎接新的一天的开始。他打开手机,查看邮箱,发现了一份神秘的礼物。他决定打开礼物的盒子。
Kinich 用
—选择两个索引
输出 Kinich 在执行上述操作任意次数后可以获得的最大分数。
题解
实际上我们不用管这个数组,我们只要把对出现次数大于
对每种出现次数大于
最后对其求和即可
具体实现可以用 map ,因为范围不大,用数组存也可以。
代码
#include <bits/stdc++.h> #define int long long #define all(x) x.begin(),x.end() #define lowbit(x) x&-x using i64 = long long; using pii = std::pair<int,int>; void solve() { int n; std::cin >> n; int ans = 0; std::map<int,int> mp; for(int i = 0 ; i < n ; i ++) { int num; std::cin >> num; mp[num] ++; } for(std::map<int,int>::iterator i = mp.begin() ; i != mp.end() ; i ++) { ans += i->second / 2; } std::cout << ans << "\n"; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int t = 1; std::cin >> t; while(t--) { solve(); } return 0; }
B Intercepted Inputs
题面
为了帮助您为即将到来的 Codeforces 竞赛做准备,Citlali设置了一个网格问题,并试图通过您的输入流为您提供一个
-
第一行包含两个整数
和 —— 网格的尺寸。 -
下面的
行包含 个整数 —— 网格的值。
然而,有人截获了你的输入流,打乱了所有给定的整数,并把它们都放在一行上!现在,
输出Citlali可能提供的
题解
第一个数是
下面一行是数,包括矩阵的数字 以及 矩阵的长和宽
因此,矩阵的大小已经确定,即
也就是说,我们只要在下面一行中找到能够构成 相乘的乘积等于
- 最容易想到的暴力算法,时间复杂度为
,超时 - 我们可以在
的时间复杂度内实现
从前往后遍历,如果前面出现过能与当前数相乘得到 的数,就可以直接输出
具体存储结构可以用 map(不知道可不可以用数组)
代码
#include <bits/stdc++.h> #define int long long #define all(x) x.begin(),x.end() #define lowbit(x) x&-x using i64 = long long; using pii = std::pair<int,int>; void solve() { int n; std::cin >> n; std::vector<int> a(n); for(int i = 0 ; i < n ; i ++) { std::cin >> a[i]; } std::map<int,int> mp; int m = n - 2; for(int i = 0 ; i < n ; i ++) { if(m%a[i] == 0) { if(mp.count(m/a[i])) { std::cout << a[i] << " " << m / a[i] << "\n"; return; } } mp[a[i]] ++; } } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int t = 1; std::cin >> t; while(t--) { solve(); } return 0; }
C Superultra's Favorite Permutation
题面
超级,一只小熊猫,拼命想要原始宝石。在他的梦中,一个声音告诉他,他必须解决以下任务,以获得一生的原始宝石供应。帮助Superultra !
构造一个长度为
题解
已知:非
已知:奇数和奇数相加是偶数(大于
已知:最小的奇数合数是
因此:
-
当
时,不可能构造成功,直接输出 ; -
当
时,把 和 放中间。其余奇数和偶数分别放两边,即构造成功
代码
#include <bits/stdc++.h> #define int long long #define all(x) x.begin(),x.end() #define lowbit(x) x&-x using i64 = long long; using pii = std::pair<int,int>; void solve() { int n; std::cin >> n; if(n < 5) { std::cout << -1 << "\n"; return; } for(int i = 1 ; i <= n ; i += 2) { if(i == 5) continue; std::cout << i << " "; } std::cout << 5 << " " << 4 << " "; for(int i = 2 ; i <= n ; i += 2) { if(i == 4) continue; std::cout << i << " "; } std::cout << "\n"; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int t = 1; std::cin >> t; while(t--) { solve(); } return 0; }
D Sharky Surfing
题面
Mualani 喜欢在她的鲨鱼冲浪板上冲浪!
Mualani 的冲浪路径可以用数轴来表示。她从位置
然而,她的冲浪之路并非一帆风顺。在她的道路上有许多障碍。每个跨栏用区间
在路径上的某些位置也有能量提升。上电
到达位置
题解
这题是一道典型的贪心,他甚至给你排好序了!感动死了。
我们只需要一个优先队列去维护就可以了:
在一个障碍之前,把前面的道具 push 进队列,然后如果你的跳跃能力(以下简称 jump )不足以跳过时,就从队列里拿出来一个道具,加到 jump 里面
如果即使队列空了,这个 jump 还是不足以跳过去,那就直接输出
如果全部都 ok 了,那就输出加了多少个道具。
(感觉还是有点不是很清晰,不懂的可以在评论区问)
代码
#include <bits/stdc++.h> #define int long long #define all(x) x.begin(),x.end() #define lowbit(x) x&-x using i64 = long long; using pii = std::pair<int,int>; void solve() { int n,m,l; std::cin >> n >> m >> l; std::vector<pii> str(n),power(m); for(int i = 0 ; i < n ; i ++) { std::cin >> str[i].first >> str[i].second; } for(int i = 0 ; i < m ; i ++) { std::cin >> power[i].first >> power[i].second; } int ans = 0; int jump = 1; int idx = 0; std::priority_queue<int> q; for(int i = 0 ; i < n ; i ++) { while(idx < m && power[idx].first < str[i].first) { q.push(power[idx].second); idx ++; } while(str[i].first - 1 + jump <= str[i].second && !q.empty()) { jump += q.top(); q.pop(); ans ++; } if(str[i].first - 1 + jump <= str[i].second) { std::cout << -1 << "\n"; return; } } std::cout << ans << "\n"; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int t = 1; std::cin >> t; while(t--) { solve(); } return 0; }
E Kachina's Favorite Binary String (交互题)
题面
这是一个互动的问题。
Kachina挑战你猜她最喜欢的长度为
要确定
在向克钦纳询问不超过
形式上,
题解
这是一道 交互题 !
首先!我们确定一下,
其次!如果
同时!如果
然后!我们设
(另外!) 如何找到
最后!我们可以发现按照上面的方法,从后往前遍历确认的话(记得用数组存起来哦),我们无法确定最前面两位的数字是什么。刚好我们还有最后一次询问机会,那我们直接得到
- 如果
说明最前面的位一定是 ,至于第二位是什么,就比较 和 的关系,如果 那么这一位上就是 ,否则就是 - 如果
说明最前面一位一定是 ,至于第二位是什么,就直接看 ,如果 那么第二位就是 ,否则就是
但是但是!如果这个串只有两位的话,那么最后一步就会报错(OJ,操作不合法,? 2 2
是不合法的),我们只需要在最前面特判一下
代码
#include <bits/stdc++.h> #define int long long #define all(x) x.begin(),x.end() #define lowbit(x) x&-x const int INF = 1e18; using i64 = long long; using pii = std::pair<int,int>; void solve() { int n; std::cin >> n; std::string s; int rans = INF; int ans; int last = INF; if(n == 2) { std::cout << "? " << 1 << " " << n << std::endl; std::cin >> rans; if(rans == 0) { std::cout << "! IMPOSSIBLE" << std::endl; } else { std::cout << "! 01" << std::endl; } return; } std::vector<int> mem(n+1); std::cout << "? " << 1 << " " << n << std::endl; std::cin >> rans; ans = rans; int sum = rans; if(sum == 0) { std::cout << "! IMPOSSIBLE" << std::endl; return; } mem[n] = rans; for(int i = n-1 ; i > 1 ; i--) { std::cout << "? " << 1 << " " << i << std::endl; std::cin >> ans; if(ans == 0 && rans != 0) { last = i+1; } if(ans == rans){ if(ans == 0) { if(last - (i+1) <= mem[last]){ s.push_back('0'); } else { s.push_back('1'); } } else { s.push_back('0'); } } else { s.push_back('1'); } mem[i] = ans; rans = ans; } if(last == INF) { last = 2; } std::cout << "? " << 2 << " " << n << std::endl; std::cin >> ans; if(ans == sum) { if(last - 2 <= mem[last]) { s.push_back('0'); } else { s.push_back('1'); } s.push_back('1'); } else { if(mem[2]) { s.push_back('1'); } else { s.push_back('0'); } s.push_back('0'); } std::reverse(all(s)); std::cout << "! " << s << "\n"; } signed main() { int t = 1; std::cin >> t; while(t--) { solve(); } return 0; }
posted on 2024-11-18 11:18 Jiejiejiang 阅读(92) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」