CF1917C
思路:
首先假如数组开始全为
那么显然是每进行一次操作
然后看不全为
我们发现
而为什么做
当然做的轮数还要
时间复杂度
Code:
#include <bits/stdc++.h>
using namespace std;
int T;
int n, k, d;
int a[2010], v[100010];
int cnt[4010];
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d%d%d", &n, &k, &d);
cnt[0] = 0;
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]), cnt[0] += a[i] == i;
for (int i = 1; i <= k; ++i) scanf("%d", &v[i]);
for (int i = 1; i <= 2 * n && i < d; ++i) {
cnt[i] = 0;
for (int j = 1; j <= v[(i - 1) % k + 1]; ++j) a[j]++;
for (int j = 1; j <= n; ++j) cnt[i] += a[j] == j;
}
int ans = 0;
for (int i = 0; i <= 2 * n && i < d; ++i) {
// cout << cnt[i] << endl;
ans = max(ans, cnt[i] + (d - i - 1) / 2);
}
printf("%d\n", ans);
}
return 0;
}