cf round 84 div2

Educational Codeforces Round 84

赛后补题

题目点击链接就进去了

A题:
题意:输入一个数n,还有一个数k,问能不能将n拆成由k个奇数组成的数
比如 6 2;6可以拆成1 5;注意这k个奇数不能相同

思路:
易得结论1:n与k必须同奇偶性,可以简单证明一下,比如n=11;k=4;时4个奇数相加一定是偶数,它们不同奇偶性,反之也是,比如n=12;k=3;3个奇数相加一定是奇数,所以得保证,同奇偶性
结论2:k*k<=n 通过等差数列前n项和可以推出,如果超过了则不存在了,(1+(2*k-1)*k就是k平方,得小于n

代码:

#include<bits/stdc++.h>
#define sc(x) scanf("%lld",&x);
#define pf printf
#define rep(i,s,e) for(int i=s;i<=e;i++)
#define dep(i,e,s) for(int i=e;i>=s;i--)
using namespace std;
#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long ll;
int main()
{
	SIS;
	//加速cin/cout
	ll t,n,k;
	cin>>t;
	while(t--){
		cin>>n>>k;
		if(n%2==k%2) {
				if(k*k<=n) cout<<"YES"<<endl;
				else cout<<"NO"<<endl;
		}
		else cout<<"NO"<<endl;
	}
	return 0;
}

B

一道模拟题
题意:有n个公主,然后每个公主有其想要嫁去的国家,一个国家只能接纳一个公主,问如何添加使得嫁出去公主最多。无需添加则输出OPTIMAL,就行了。
思路:国家的王子匹配公主,如果王子没被匹配上的话,就给公主匹配上,判断有几个公主匹配上了,如果总数为n,则不用添加匹配了,如果不为n,则得添加,那个没有匹配上的公主,和没有匹配上的国家王子

代码:

#include<bits/stdc++.h>
#define sc(x) scanf("%lld",&x);
#define pf printf
#define rep(i,s,e) for(int i=s;i<=e;i++)
#define dep(i,e,s) for(int i=e;i>=s;i--)
using namespace std;
#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t,n,k,flag,x,cnt;
const int maxn=1e5+10;
int a[maxn],girl[maxn];
int main()
{
	SIS;
	//加速cin/cout
	cin>>t;
	while(t--){
		for(int i=1;i<=n;i++)
		{
			a[i]=0;
			girl[i]=0;
		}
		cnt = 0;
		cin>>n;
		rep(i,1,n){
			cin>>k;
			flag=1;
			rep(j,1,k){
				cin>>x;
				if(a[x]==0 && flag){
					a[x]=1;
					girl[i]=x;
					flag=0;
				}				
			}
			if(!flag) cnt++;
		}
		if(cnt!=n){
			int ans1=0,ans2=0;
			rep(i,1,n){
				if(!girl[i]) ans1=i;
				if(!a[i]) ans2=i;
				if(ans1 && ans2) break;
			}
			cout<<"IMPROVE"<<endl;
			cout<<ans1<<" "<<ans2<<endl;
		}
		else cout<<"OPTIMAL"<<endl;
	}
	return 0;
}

C

cf的套路真的是活啊。。。。
题意:在一个 NM 的矩阵中,给你 k 个起始点和 k 个目标点,你可以进行移动操作,每次可以让所有起始点向同一个方向移动一格,要让每个点至少走一遍它对应的目标点,总移动次数不超过 2N*M 次。

题解:走到最左上端,然后来回摆动,奇数往右跑,偶数回来,绝对不超过,2mn次数移动

代码:

#include<bits/stdc++.h>
#define sc(x) scanf("%lld",&x);
#define pf printf
#define rep(i,s,e) for(int i=s;i<=e;i++)
#define dep(i,e,s) for(int i=e;i>=s;i--)
using namespace std;
#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int main()
{
	SIS;
	//加速cin/cout
	int n,m,k;
	cin>>n>>m>>k;
	int sx,sy,ex,ey;
	rep(i,1,k) cin>>sx>>sy;
	rep(i,1,k) cin>>ex>>ey;
	cout<<m-1+n-1+m*n<<endl;
	rep(i,1,m-1) cout<<"L";
	rep(i,1,n-1) cout<<"U";
	rep(i,1,n){
		rep(j,1,m-1){
			if(i&1) cout<<"R";
			else cout<<"L";
		}
		cout<<"D";
	}
	return 0;
}

E
???OEIS???

posted @   爱xiaoyi  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示