CF1401

就是比赛前打两场比赛练练手

然后比赛鸽了,那帮小兔崽子不叫我

CF1401A Distance and Axis

O,A两点间距离为n,那么我们如果n<kn<k要移动nkn-k

否则我们要看看奇偶性,选择性移动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