1 vj团队5补题(上午)
https://vjudge.net/contest/643995
题解
2 cf r950(下午)
https://vjudge.net/contest/643996#google_vignette
最大公约数非递减序列
重点
1.思维:删去一个ai时,需要删除ai与前后的公因数,并加上ai-1与ai+1的最大公因数。
3 cf团队赛6补题(下午)
思维转化
题意:n个需要修理的网络,每个机器能同时修理k个,问修理这n个需要多少机器。
思路:找间隔小于一千的序列,这个序列里最长的,他的网络个数/k就是至少需要的机器数量,因为间隔大于1000的其实只要一台机器就能处理。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n,k;
int jude(int x)
{
if(x%k==0) return x/k;
else return x/k+1;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> k;
int a[N];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int sum = 0;
int st = 1;
//枚举每一段的终点,找他最前面的第一个间隔小于1000的,这一段就是子序列之一。
for (int ed = 1; ed <= n; ed++) {
while (a[ed] - a[st] >= 1000) {
st++;
}
int count = ed - st + 1;
sum = max(sum, jude(count));
}
cout << sum << endl;
return 0;
}