日常训练2025-1-18
1.日常刷题2025-3-162.日常训练2025-1-23.日常训练2025-1-34.日常训练2025-1-55.日常训练2025-1-86.日常训练2025-1-117.日常训练2025-1-128.日常训练2025-1-139.日常训练2025-1-1410.日常训练2025-1-1511.日常训练2025-1-1612.日常训练2025-1-17
13.日常训练2025-1-18
14.日常训练2025-1-1915.日常训练2025-1-2116.日常训练2025-1-2217.日常刷题2025-1-2318.日常训练2025-1-2419.日常刷题2025-1-2520.日常刷题21.日常刷题2025-2-622.日常刷题2025-2-923.日常刷题2025-2-1424.日常刷题2025-2-1525.日常刷题2025-2-1726.日常刷题2025-2-2027.日常刷题2025-2-2128.日常刷题2025-2-2229.日常刷题2025-2-2430.日常刷题2025-2-2631.日常刷题2025-2-2732.日常刷题2025-2-2833.日常刷题2025-3-134.日常刷题2025-3-235.日常刷题2025-3-336.日常刷题2025-3-537.日常刷题2025-3-638.日常刷题2025-3-739.日常刷题2025-3-840.日常刷题2025-3-941.日常刷题2025-3-1042.日常刷题2023-3-1143.日常刷题2025-3-1344.非常棒的二分和DP日常训练2025-1-18
D1. Turtle and a MEX Problem (Easy Version)
rating:1500
思路(Trick)
每一个数组会有两个mex,第一个是没有意义的,因为做一次操作得到第一个mex后补到数组中就能得到更大的mex了,这样能让x更大,所以对于每个数组,我们只需要维护第二个mex。
然后我们发现,不需要维护每一个数组的第二个mex,因为如果有一个最大的mex存在,这个mex属于数组 b ,那么我们一定是去b数组做两次操作让x最大,所以其他数组的第二个mex就没有意义了。
最后做一个计数即可。
代码
#include <bits/stdc++.h> typedef std::pair<long long, long long> pll; typedef std::pair<int, int> pii; #define INF 0x3f3f3f3f #define MOD 998244353 using i64 = long long; const int N = 1e5+5; void solve(){ int n, m; std::cin >> n >> m; std::vector<int> L(n); std::vector a(n, std::set<int>()); for (int i = 0; i < n; i++){ int l; std::cin >> l; L[i] = l; for (int j = 0; j < l; j++){ int x; std::cin >> x; a[i].insert(x); } } int f1 = 0, f2 = 0; for (int i = 0; i < n; i++){ int k = 1; int j = 0; while (true){ if (a[i].count(j)){ j++; }else if (k == 1){ j++; k--; }else if (k == 0){ f2 = std::max(j, f2); break; } } } // std::cerr<< f2 << '\n'; i64 ans = 0; if (m < f2){ ans += f2*(m+1); }else if (m == f2){ ans += 1LL * f2 * (f2+1); }else{ ans += 1LL * f2 * (f2+1); ans += 1LL * (m - f2) * (f2+1 + m) / 2; } std::cout << ans << '\n'; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2); int t = 1, i; std::cin >> t; for (i = 0; i < t; i++){ solve(); } return 0; }
G1. Ruler (easy version)
rating:1500
思路(二分答案)
比较明显的一道二分答案法
代码
#include <bits/stdc++.h> typedef std::pair<long long, long long> pll; typedef std::pair<int, int> pii; #define INF 0x3f3f3f3f #define MOD 998244353 using i64 = long long; const int N = 1e5+5; void solve(){ auto ask = [&](int x, int y) ->int{ std::cout << "? " << x << ' ' << y << std::endl; fflush(stdout); int ret; std::cin >> ret; return ret; }; int l = 2, r = 999; while (l < r){ int mid = (l + r) / 2; if (ask(1, mid) == mid + 1){ r = mid; }else{ l = mid + 1; } } std::cout << "! " << r << std::endl; fflush(stdout); } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2); int t = 1, i; std::cin >> t; for (i = 0; i < t; i++){ solve(); } return 0; }
本文作者:califeee
本文链接:https://www.cnblogs.com/califeee/p/18678144
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步