CF 改题

改到 \(1800-2000\) 的题目吧。

2024

9月21日 Codeforces Round 974 (Div. 3)

发挥并不算好,做完 \(D\) 就困了,看完 \(E\) 也确实没有思路,\(BC\) 则是因为写代码时的奇怪疏漏各吃一发罚时,rank 1700左右。

A Robin Helps

一道比较容易的题目,由题目信息模拟即可。

#include<bits/stdc++.h>
using namespace std;
 
int t, n, k;
int a;
 
template<typename T>
inline void read(T&x){
	x = 0; char q; bool f = 1;
	while(!isdigit(q = getchar()))	if(q == '-')	f = 0;
	while(isdigit(q)){
		x = (x<<1) + (x<<3) + (q^48);
		q = getchar();
	}
	x = f?x:-x;
}
 
template<typename T>
inline void write(T x){
	if(x < 0){
		putchar('-');
		x = -x;
	}
	if(x > 9)	write(x/10);
	putchar(x%10^48);
}
 
signed main(){
	read(t);
	while(t--){
		read(n), read(k);
		int ans = 0, num = 0;
		for(register int i = 1; i <= n; ++i){
			read(a);
			if(a >= k)	num += a;
			if(a == 0 && num)	num--, ans++;
		}
		write(ans), puts("");
	}
	return 0;
}

B Robin Hood and the Major Oak

首先需要关注的仅为奇偶性,且只用关注 \(n-k+1\) 年到 \(n\) 的叶子数即可,比赛的时候想麻烦了,明显只需要计数其中的奇数个数,若为偶则答案为偶,为奇则答案为奇。

#include<bits/stdc++.h>
using namespace std;
 
int t, n, k;
 
template<typename T>
inline void read(T&x){
	x = 0; char q; bool f = 1;
	while(!isdigit(q = getchar()))	if(q == '-')	f = 0;
	while(isdigit(q)){
		x = (x<<1) + (x<<3) + (q^48);
		q = getchar();
	}
	x = f?x:-x;
}
 
template<typename T>
inline void write(T x){
	if(x < 0){
		putchar('-');
		x = -x;
	}
	if(x > 9)	write(x/10);
	putchar(x%10^48);
}
 
signed main(){
	read(t);
	while(t--){
		read(n), read(k);
		if(n <= k){
			if(n%4 == 1 || n%4 == 2)	puts("No");
			else	puts("Yes");
		}
		else{
			if((n-k+1)%2 == 1){
				if(k%4 == 1 || k%4 == 2)	puts("No");
				else	puts("Yes");
			}
			else{
				if(k%4 == 2 || k%4 == 3)	puts("No");
				else	puts("Yes");
			}
		}
	}
	return 0;
}

C Robin Hood in Town

很显然当且仅当 \(n \le 2\) 的情况,无论如何也无法满足。

\(n\ge 3\) 时,只需要排序以后找到 \((n+2)/2\) 位的大小,并由此得到应有 \(sum\) 与先 \(sum\) 相减即可。

#include<bits/stdc++.h>
using namespace std;
 
int t, n;
int a[200005];
long long sum;
 
template<typename T>
inline void read(T&x){
	x = 0; char q; bool f = 1;
	while(!isdigit(q = getchar()))	if(q == '-')	f = 0;
	while(isdigit(q)){
		x = (x<<1) + (x<<3) + (q^48);
		q = getchar();
	}
	x = f?x:-x;
}
 
template<typename T>
inline void write(T x){
	if(x < 0){
		putchar('-');
		x = -x;
	}
	if(x > 9)	write(x/10);
	putchar(x%10^48);
}
 
signed main(){
	read(t);
	while(t--){
		read(n);
		sum = 0;
		for(register int i = 1; i <= n; ++i)	read(a[i]), sum += a[i];
		sort(a+1, a+n+1);
		if(n <= 2){
			puts("-1");
			continue;
		}
		long long maxn = a[(n+2)/2];
		if(sum > 2*n*maxn){
			puts("0");
			continue;
		}
		long long ans = maxn*n*2-sum+1;
		write(ans), puts("");
	}
	return 0;
}

D Robert Hood and Mrs Hood

第一眼数颜色完全分块完全不可做,但是细看就会发现是一道比较容易处理的题目。因为题目是不带修的,所以可以以提前预处理的方式解决。只需要将每一个节点的起始任务与终止任务数提前处理,再在 \(1-n\) 跑一遍每一个点起始时的当前任务量即可。

#include<bits/stdc++.h>
using namespace std;
 
int t;
int n, d, k;
int st[100005], en[100005];
 
struct node{
	int l, r;
}s[100005];
 
template<typename T>
inline void read(T&x){
	x = 0; char q; bool f = 1;
	while(!isdigit(q = getchar()))	if(q == '-')	f = 0;
	while(isdigit(q)){
		x = (x<<1) + (x<<3) + (q^48);
		q = getchar();
	}
	x = f?x:-x;
}
 
template<typename T>
inline void write(T x){
	if(x < 0){
		putchar('-');
		x = -x;
	}
	if(x > 9)	write(x/10);
	putchar(x%10^48);
}
 
signed main(){
	read(t);
	while(t--){
		read(n), read(d), read(k);
		for(register int i = 1; i <= n; ++i)	st[i] = en[i] = 0;
		for(register int i = 1; i <= k; ++i){
			read(s[i].l), read(s[i].r);
			st[s[i].l]++, en[s[i].r]++;
		}
		int minn = 0, maxn = 0, ansi = 1, ansa = 1;
		int now = 0;
		for(register int i = 1; i <= d; ++i)	now += st[i], now -= en[i-1];
		minn = maxn = now;
		for(register int i = 2; i <= n-d+1; ++i){
			now += st[i+d-1], now -= en[i-1];
			if(now < minn)	minn = now, ansi = i;
			if(now > maxn)	maxn = now, ansa = i;
		}
		write(ansa), putchar(' '), write(ansi), puts("");
	}
	return 0;
}

E Rendez-vous de Marian et Robin

事实上 \(E\) 似乎并不难,考场上因为对边权变化和马的理解不到位没做出来。

对于相遇,显然不可能两人经过了同一个点,却在另一个点上相遇。所以两人不可能在会骑上同一匹马,无需考虑重复用马问题。同时,对于骑马以后的 \(dijkstra\) 的处理,有一个很妙的方法,即建一张新的图,所有边权都是原来的 \(\frac{1}{2}\),将有马的地方的两张图以 \(0\) 边权连接即可。

1


posted @ 2024-11-02 11:11  Zzzzzzzm  阅读(13)  评论(0)    收藏  举报