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???
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)