CF1401
2021-02-25
3 min read
就是比赛前打两场比赛练练手
然后比赛鸽了,那帮小兔崽子不叫我
CF1401A Distance and Axis
O,A两点间距离为n,那么我们如果要移动步
否则我们要看看奇偶性,选择性移动1步
#include<bits/stdc++.h>
using namespace std;
int T, n, k;
int main() {
scanf("%d", &T);
while(T-- > 0) {
scanf("%d%d", &n, &k);
if(n < k)printf("%d\n", k - n);
else if((n & 1) ^ (k & 1))printf("1\n");
else puts("0");
}
return 0;
}
CF1401B Ternary Sequence
A2优先匹配B1
A0优先匹配B2
这两个操作之后
A剩下1,B有0,1,2,直接匹配
A剩下0,1,B有0,1 直接匹配
A剩下1,2,B有0,2,2匹配2,1匹配0,如果还有什么剩下的就只可能有一种匹配情况了
A剩下0,1,2,B有1, 直接匹配
CF1401C Mere Array
整个数组最小的元素作为中转站可以交换任意两个元素
在此基础上剩下的元素如果已经排好序就行了
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 7;
int T, n;
struct rec {
int id, u;
bool operator<(const rec &x) {
return u == x.u ? id < x.id : u < x.u;;
}
} a[MAXN];
int main() {
scanf("%d", &T);
while(T-- > 0) {
scanf("%d", &n);
a[0].u = 1e9;
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i].u);
a[i].id = i;
}
sort(a + 1, a + n + 1);
bool flg = 1;
for(int i = 1; i <= n; ++i) {
if(__gcd(a[1].u, a[i].u) != a[1].u && a[i].id != i) {
flg = 0;
break;
}
}
if(flg) {
puts("YES");
} else {
puts("NO");
}
}
return 0;
}
CF1401D Maximum Distributed Tree
考虑每个边都有一个贡献的系数
然后把这个系数排序从大到小向里面放质因数即可
CF1401E Divide Square
这个可以直接做吧...
对于直接跨越的,我们直接让答案+1,不计算他和其他的交点的答案
否则,我们会发现每一个交点都会使块数增加,直接统计和其他边的交点即可,因为竖的只会和横的交,所以很好算,相当于我们有一个修改和查询操作而已
最后答案+1