Codeforces Round 962 (Div. 3)
1.Codeforces Round 958 (Div. 2)2.Codeforces Round 957 (Div. 3)3.Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2)4.Codeforces Round 960 (Div. 2)5.AtCoder Beginner Contest 3636.Codeforces Round 961 (Div. 2)7.AtCoder Beginner Contest 362
8.Codeforces Round 962 (Div. 3)
9.Pinely Round 4 (Div. 1 + Div. 2)10.Educational Codeforces Round 168 (Rated for Div. 2)11.AtCoder Beginner Contest 36712.Codeforces Round 967 (Div. 2)13.Codeforces Round 968 (Div. 2)14.Educational Codeforces Round 173 (Rated for Div. 2)15.Educational Codeforces Round 172 (Rated for Div. 2)(C-D)16.Codeforces Round 998 (Div. 3)17.2025牛客寒假算法基础集训营218.2025牛客寒假算法基础集训营1题目链接:Codeforces Round 962 (Div. 3)
总结:ABC秒过,D有点难评了,E优化很妙。
A. Legs
tag:签到
void solve(){ cin >> n; int a = n / 4, b = n % 4; a += b / 2; cout << a << endl; }
B. Scale
tag:模拟
void solve(){ cin >> n >> k; vector a(n + 1, vector<char>(n + 1)); for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++) cin >> a[i][j]; for (int i = 1; i <= n; i += k){ for (int j = 1; j <= n; j += k) cout << a[i][j]; cout << endl; } }
C. Sort
tag: 前缀和
Description:给定两个字符串
Solution:典型的trick,使用前缀和记录一下每个字符出现的次数,这样我们就可以
void solve(){ int q; cin >> n >> q; string a, b; cin >> a >> b; a = "$" + a; b = "$" + b; vector ta(n + 1, vector<int>(26)); vector tb(n + 1, vector<int>(26)); for (int i = 1; i <= n; i ++){ ta[i] = ta[i - 1]; tb[i] = tb[i - 1]; ta[i][a[i] - 'a'] ++; tb[i][b[i] - 'a'] ++; } while (q --){ int l, r; cin >> l >> r; vector<int> t(26), tt(26); int cnt = 0; for (int i = 0; i < 26; i ++){ t[i] = ta[r][i] - ta[l - 1][i]; tt[i] = tb[r][i] - tb[l - 1][i]; cnt += abs(t[i] - tt[i]); } cout << cnt / 2 << endl; } }
D. Fun
tag:数学
Description:给定
Solution:注意到是不等式显然需要化简,我们枚举
void solve(){ int x; cin >> n >> x; int ans = 0; for (int a = 1; a < n; a ++) for (int b = 1; a * b < n; b ++){ ans += max(0LL, min((n - a * b) / (a + b), x - a - b)); } cout << ans << endl; }
E. Decode
tag:前缀和 + 优化
Description:给定一个
Solution:显然对于一个
- 但是对于同一个
可能有多个 ,使用vector存储会TLE。 - 我们考虑同一个
,两个 的贡献: 化简后可知,我们只需要将相同状态的下标和相加即可。
void solve(){ string s; cin >> s; s = "&" + s; map<int, int> mp; int ans = 0; int t = 0; mp[0] = 1; for (int i = 1; i < s.size(); i ++){ if (s[i] == '1') t ++; else t --; ans += (s.size() - i) * (mp[t]) % mod; ans %= mod; mp[t] += i + 1; mp[t] %= mod; } cout << ans << endl; }
F. Bomb
tag: 二分
Description:给定两个长度为1 <= n <= 1e5, 1 <= k <= 1e9
。
Solution:显然我们需要每次取最大的
- 考虑使用二分找到变化后数组中最大值的最小值
(即数组中所有值都不能超过这个值)。 - 如果操作次数小于
,那么剩下的操作次数一定小于数组中 的数量,否则 可以更小。
void solve(){ cin >> n >> k; vector<int> a(n), b(n); for (int i = 0; i < n; i ++) cin >> a[i]; for (int i = 0; i < n; i ++) cin >> b[i]; int ans = 0; auto check = [&](int &mid, int &t, int &res) -> bool{ res = 0, t = 0; for (int i = 0; i < n; i ++){ if (a[i] <= mid) continue; int tt = (a[i] - mid + b[i] - 1) / b[i]; res += tt; t += (a[i] + a[i] - b[i] *(tt - 1)) * tt / 2; } if (res > k) return true; return false; }; int l = -1, r = 1e15, t, res; while (l + 1 < r){ int mid = l + r >> 1; if (check(mid, t, res)) l = mid; else r = mid; } cout << t + (k - res) * r << endl; }
合集:
题解
标签:
Codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!