Codeforces Round #573 (Div. 2)
作者:互联网
题意:ABCD四个等级,给你一个数,然后按照规则寻找能接近的最大等级,只能加上0-2;(看来只适合做这种水题
#include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; const int inf=0x3f3f3f3f; int main() { int n; cin>>n; if(n%4==1) { cout<<0<<' '<<'A'<<endl; } else if(n%4==2) { cout<<1<<' '<<'B'<<endl; } else if(n%4==3) { cout<<2<<' '<<'A'<<endl; } else { cout<<1<<' '<<'A'<<endl; } return 0; }View Code
题意:给你三张牌,你每次可以拿任意的牌,让牌是同花顺或者豹子....
模拟完事,写的有点小复杂....
#include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; const int inf=0x3f3f3f3f; struct node{ int num; char ch; }; bool cmp(node a,node b){ return a.num<b.num; } int main() { node a[4]; int b[20]; int s=0,p=0,m=0; memset(b,0,sizeof(b)); for(int i=0;i<3;i++) { cin>>a[i].num>>a[i].ch; b[a[i].num]++; getchar(); if(a[i].ch=='s') s++; else if(a[i].ch=='p') p++; else m++; } sort(a,a+3,cmp); int flag=0; if(s==3||p==3||m==3) { for(int i=1;i<=9;i++) { if(b[i]==3||(b[i]==1&&b[i+1]==1&&b[i+2]==1)) { cout<<0<<endl; return 0; } else if(b[i]==2) { cout<<1<<endl; return 0; } else if((b[i]==1&&b[i+1]==1)||(b[i]==1&&b[i+2]==1)) { cout<<1<<endl; return 0; } } cout<<2<<endl; } else if(s==2) { memset(b,0,sizeof(b)); for(int i=0;i<3;i++) if(a[i].ch=='s') b[a[i].num]++; for(int i=1;i<=9;i++) { if(b[i]==2) { cout<<1<<endl; return 0; } else if((b[i]==1&&b[i+1]==1)||(b[i]==1&&b[i+2]==1)) { cout<<1<<endl; return 0; } } cout<<2<<endl; } else if(p==2) { memset(b,0,sizeof(b)); for(int i=0;i<3;i++) if(a[i].ch=='p') b[a[i].num]++; for(int i=1;i<=9;i++) { if(b[i]==2) { cout<<1<<endl; return 0; } else if((b[i]==1&&b[i+1]==1)||(b[i]==1&&b[i+2]==1)) { cout<<1<<endl; return 0; } } cout<<2<<endl; } else if(m==2) { memset(b,0,sizeof(b)); for(int i=0;i<3;i++) if(a[i].ch=='m') b[a[i].num]++; for(int i=1;i<=9;i++) { if(b[i]==2) { cout<<1<<endl; return 0; } else if((b[i]==1&&b[i+1]==1)||(b[i]==1&&b[i+2]==1)) { cout<<1<<endl; return 0; } } cout<<2<<endl; } else cout<<2<<endl; return 0; } // s 是要同字符且数字是递增或者递减的 // k 是要都相同的三个一样的View Code
C - Tokitsukaze and Discard Items
题意:给你n个数,有m个要丢掉的数字,然后每k个数分为一组,每次只能操作一组,操作:将一组内要丢掉的数字全部丢掉,然后后面的往前面移,一直操作到没有要丢掉的数字,问需要多少次操作;
比赛的时候想错题意了,以为只分成两份,操作完前面一份,后面自然+1就完事了....
思路:按要丢掉的数字找到那一组的最后一个数字是多少,然后丢掉该丢的,循环;
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+10; int main() { ll n,m,k; cin>>n>>m>>k; ll a[maxn]; for(int i=0;i<m;i++) cin>>a[i]; ll ans=0; ll now=0; ll last=0; ll cnt=0; while(now<m) { ll last=((a[now]-cnt-1)/k+1)*k+cnt; //cout<<"now="<<now<<"last="<<last<<"cnt="<<cnt<<endl; while(a[now]<=last&&now<m) { now++; cnt++; } ans++; //cout<<"ans="<<ans<<endl; } cout<<ans<<endl; return 0; } /* 16 7 5 2 3 4 5 6 15 16 */View Code
标签:const,573,++,ll,Codeforces,丢掉,int,num,Div 来源: https://www.cnblogs.com/lin1874/p/11181994.html