Codeforces Round 962 (Div. 3) 补题记录(A~G)
这场 Div. 3 难度高于平时。
A
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500100;
int a[N];
signed main() {
int T;
scanf("%lld", &T);
while (T--) {
int n;
scanf("%lld", &n);
int cnt = n / 4;
n %= 4;
if (n) ++cnt;
printf("%lld\n", cnt);
}
return 0;
}
B
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500100;
int a[3010][3010];
signed main() {
int T;
scanf("%lld", &T);
while (T--) {
int n, m;
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
scanf("%1lld", &a[i][j]);
for (int i = 1; i <= n; i += m, puts(""))
for (int j = 1; j <= n; j += m)
printf("%lld", a[i][j]);
}
return 0;
}
C
clist 评分
维护
时间复杂度为
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500100;
char s[N], t[N];
int box[N][26], bb[N][26];
signed main() {
int T;
scanf("%lld", &T);
while (T--) {
int n, q;
scanf("%lld%lld%s%s", &n, &q, s + 1, t + 1);
for (int i = 1; i <= n; ++i) {
for (int j = 0; j < 26; ++j)
box[i][j] = box[i - 1][j], bb[i][j] = bb[i - 1][j];
++box[i][s[i] - 'a'], ++bb[i][t[i] - 'a'];
}
while (q--) {
int l, r;
scanf("%lld%lld", &l, &r);
int sum = 0;
for (int i = 0; i < 26; ++i)
sum += abs(box[r][i] - box[l - 1][i] - bb[r][i] + bb[l - 1][i]);
printf("%lld\n", sum >> 1);
}
}
return 0;
}
D
clist 评分
问题转化为求下列表达式的值:
其中
然后发现后面表达式是一个调和级数的形式,也就是说总的有效的答案数为
因此直接暴力枚举即可。时间复杂度为
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500100;
char s[N], t[N];
int box[N][26], bb[N][26];
signed main() {
int T;
scanf("%lld", &T);
while (T--) {
int n, x, cnt = 0;
scanf("%lld%lld", &n, &x);
for (int i = 1; i < x; ++i) {
for (int j = 1; j < x - i; ++j) {
int remain = (n - i * j) / (i + j);
if (i * j >= n)
break;
remain = min(remain, x - i - j);
if (remain > 0)
cnt += remain;
}
}
printf("%lld\n", cnt);
}
return 0;
}
E
clist 评分
令
因此可以开始推式子:
发现
然后根据括号的套路,将
把 map
里算答案。
时间复杂度为 gp_hash_table
一类哈希表可以做到理论
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500100, mod = 1e9 + 7;
char s[N];
int sum[N];
signed main() {
int T;
scanf("%lld", &T);
while (T--) {
scanf("%s", s + 1);
int n = strlen(s + 1);
for (int i = 1; i <= n; ++i)
if (s[i] == '1') sum[i] = sum[i - 1] + 1;
else sum[i] = sum[i - 1] - 1;
int res = 0;
map<int, int> mp;
for (int x = n; x; --x) {
res += mp[sum[x - 1]] * x % mod;
mp[sum[x]] += (n - x + 1);
mp[sum[x]] %= mod;
res %= mod;
}
printf("%lld\n", res % mod);
}
return 0;
}
F
clist 评分
不是这明显是虚高啊!这不比 E 简单?
首先考虑一个
然后看到每一次取出堆里最大的元素,因此可以发现答案一定存在一个阈值
容易发现
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500100, mod = 1e9 + 7;
int a[N], b[N];
int calc(int shouxiang, int gongcha, int xiangshu) {
int moxiang = shouxiang - gongcha * (xiangshu - 1);
return (shouxiang + moxiang) * xiangshu / 2;
}
signed main() {
int T;
scanf("%lld", &T);
while (T--) {
int n, k;
scanf("%lld%lld", &n, &k);
for (int i = 1; i <= n; ++i)
scanf("%lld", &a[i]);
for (int i = 1; i <= n; ++i)
scanf("%lld", &b[i]);
int l = 0, r = 1e9, best = 0;
while (l <= r) {
int mid = l + r >> 1;
int cnt = 0;
for (int i = 1; i <= n; ++i) {
if (a[i] >= mid)
cnt += (a[i] - mid) / b[i] + 1;
}
if (cnt >= k)
best = mid, l = mid + 1;
else
r = mid - 1;
}
int sum = 0;
for (int i = 1; i <= n; ++i) {
if (a[i] >= best + 1) {
int p = (a[i] - (best + 1)) / b[i] + 1;
sum += calc(a[i], b[i], p);
k -= p;
}
}
sum += k * best;
printf("%lld\n", sum);
}
return 0;
}
G
clist 评分
好逆天一题。考虑随机赋权哈希。
容易发现给出的问题即为一个大小为
#include <iostream>
#include <cstdio>
#include <random>
#include <map>
#define int long long
const int N = 500100, mod = 1e9 + 7;
int val[N];
std::mt19937_64 mt;
std::uniform_int_distribution<int> qwq(1, 400000000000000000);
signed main() {
int T;
scanf("%lld", &T);
while (T--) {
int n, m;
scanf("%lld%lld", &n, &m);
for (int i = 0; i <= n; ++i)
val[i] = 0;
for (int i = 0; i < m; ++i) {
int a, b;
scanf("%lld%lld", &a, &b);
int t = qwq(mt);
val[a] ^= t, val[b] ^= t;
}
std::map<int, int> mp;
int mx = 0;
for (int i = 1; i <= n; ++i)
mx = std::max(mx, ++mp[val[i] ^= val[i - 1]]);
printf("%lld\n", n - mx);
}
}
本文来自博客园,作者:yhbqwq,转载请注明原文链接:https://www.cnblogs.com/yhbqwq/p/18326632,谢谢QwQ
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)