Educational Codeforces Round 138 (Rated for Div. 2)

写在前面:没打,在补。

CF1749 (div 2)

A. Cowardly Rooks

简要题意:

n×n的国际象棋棋盘,有m个车,问是否能移动一个车,使得

  1. 没有两个车在同一格子里
  2. 没有两个车能互相攻击

车能攻击一行或一列。1n,m8

保证给定的m个车满足1,2条件。


因为保证了输入的车一开始满足条件,所以只有当没有空行和空列时,才无法找到移动一个车后仍然合法的方案。

所以n==m 输出NO 否则YES

code:

#include <bits/stdc++.h>

using namespace std;

inline void _main(){
	int n,m;
	cin>>n>>m;
	for(int i=1,x,y;i<=m;++i) cin>>x>>y;
	if(n==m) puts("NO");
	else puts("YES");
}

int main(){
	int t;
	cin>>t;
	while(t--) _main();
	return 0;
}

B. Death's Blessing

简要题意:
n只怪,打死一只怪需要ai的时间,同时会给相邻怪的时间加上bi,问能把怪打完的最小时间。


不难发现,每次选择两边打其中一个打一定最优(不然你bi会给两个人,同时所有ai都会打完),bi最大的那个数肯定最后打。

code:

#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 2e5 + 5;

int n,a[MAX_N],b[MAX_N];

inline void _main(){
	cin>>n;
	long long ans=0;
	int mx=0;
	for(int i=1;i<=n;++i) cin>>a[i],ans+=a[i];
	for(int i=1;i<=n;++i) cin>>b[i],ans+=b[i],mx=max(mx,b[i]);
	ans-=mx;
	cout<<ans<<'\n';
}

int main(){
	int t;
	cin>>t;
	while(t--) _main();
	return 0;
}

C.Number Game

简要题意:

一个序列,Alicei次选择一个小于等于ki+1的数删掉,Bob任意选择一个数删掉。

如果Alice无法删数,则输。

k轮结束后,若Alice没输,则赢。

求最大的k

1n100


不难发现,可以二分+check,但是数据范围不大,也可以直接暴力枚举+check

code:

#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 100 + 5;

int n,a[MAX_N];

inline bool check(int x){
	int l=1,r=n;
	for(int i=1;i<=x;++i){
		if(i>1) l++;
		while(r>=l && a[r]>x-i+1) r--;
		if(l>r) return false;
		r--;
	}
	return true;
}

inline void _main(){
	cin>>n;
	for(int i=1;i<=n;++i) cin>>a[i];
	sort(a+1,a+1+n);
	int ans=0;
	for(int i=n;i;--i){
		if(check(i)){
			ans=i;
			break;
		}
	}
	cout<<ans<<'\n';
}

int main(){
	int t;
	cin>>t;
	while(t--) _main();
	return 0;
}

D. Counting Arrays

简要题意:

posted @   Thermalrays  阅读(31)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示