Codeforces Round #575 (Div. 3)
Posted wgqqq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #575 (Div. 3)相关的知识,希望对你有一定的参考价值。
本蒟蒻已经掉到灰名了(菜到落泪),希望这次打完能重回绿名吧......
这次赛中A了三题
下面是本蒟蒻的题解
A.Three Piles of Candies
这题没啥好说的,相加除2就完事了
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll q; scanf("%lld",&q); while(q--) { ll a,b,c; scanf("%lld %lld %lld",&a,&b,&c); printf("%lld\n",(a+b+c)/2); } return 0; }
B.Odd Sum Segments
题意大概就是把长度为n的数组分成k段,每段的总和为奇数,若可以则输出YES和和每段的右边界,否则输出NO。
偶数对结果没有影响,所以只用考虑奇数。记录奇数的个数,只要每段中含有奇数个奇数就行。
那么往前面的k-1段中各放一个奇数,再把剩下的奇数放在最后一段,判断最后一段中的奇数个数是否为奇数,判断后打印前面的奇数位置和n即可。(讲的不太清楚...)
代码如下:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn=1e6+5; ll a[maxn]; int main() { ll q; scanf("%lld",&q); while(q--) { ll n,k; scanf("%lld %lld",&n,&k); ll cnt=0; for(ll i=1; i<=n; i++) { scanf("%lld",&a[i]); if(a[i]%2==1) cnt++; } if(cnt>=k&&(cnt-(k-1))%2==1/*判断最后一堆中的奇数个数是否为偶数*/) { printf("YES\n"); ll cnt2=0; for(ll i=1; i<=n; i++) { if(cnt2>=k-1)break; if(a[i]%2==1) { printf("%lld ",i); cnt2++; } } printf("%lld\n",n); } else printf("NO\n"); } return 0; }
C.Robot Breakout
大概就是纯模拟吧,对于每个机器人,记录它能到达的x,y的上下界,然后取个交集,输出交集的左边界。
代码如下:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn=1e5+5; const ll INF=1e5; ll a[maxn][4];//储存可达状态 ,a[i][0]为x的下界,a[i][1]为x的上界,a[i][2]为y的下界,a[i][3]为y的上界 int main() { ll q; scanf("%lld",&q); while(q--) { ll n,x,y,f1,f2,f3,f4; scanf("%lld",&n); for(ll i=1;i<=n;i++) { scanf("%lld%lld%lld%lld%lld%lld",&x,&y,&f1,&f2,&f3,&f4); a[i][0]=a[i][1]=x;//上下界都标记为x a[i][2]=a[i][3]=y;//同理 if(f1)a[i][0]=-INF; if(f2)a[i][3]=INF; if(f3)a[i][1]=INF; if(f4)a[i][2]=-INF; } /*for(int i=1;i<=n;i++) { cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<" "<<a[i][3]<<endl; }*/ ll xmax=INF,xmin=-INF,ymax=INF,ymin=-INF; bool flag =true; for(ll i=1;i<=n;i++) { if(a[i][0]>xmax||a[i][1]<xmin||a[i][2]>ymax||a[i][3]<ymin) { printf("0\n"); flag=false; break; } if(xmax>a[i][1])xmax=a[i][1]; if(xmin<a[i][0])xmin=a[i][0]; if(ymax>a[i][3])ymax=a[i][3]; if(ymin<a[i][2])ymin=a[i][2]; } if(flag) { printf("1 %lld %lld\n",xmin,ymin); } } return 0; }
后面的题目赛中没做出来(果然还是我太菜了555)
下午补了题晚上再把个人的题解放上来
以上是关于Codeforces Round #575 (Div. 3)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #575 (Div. 3)
Codeforces Round #575 (Div. 3) C. Robot Breakout (模拟,实现)
Codeforces Round #575 (Div. 3) D1. RGB Substring (easy version)
Codeforces Round #575 (Div. 3) RGB Substring (hard version) ( FFT)
Codeforces Round #575 (Div. 3) B. Odd Sum Segments (构造,数学)
Codeforces Round #575 (Div. 3) (A. Three Piles of Candies)(数学)