A - Dreamoon and Ranking Collection
给定n个排名,和x次将要举行的比赛,x次比赛可能取得任意名称,使名称可以连成1,2,3...v连续的数,求v的最大值
从1开始遍历,如果这个名次没有就记录,到x次后,继续遍历,看看是否还连续
int main() { int k,n,i,x,b,j; cin>>k; while(k--){ int a[510]={0}; cin>>n>>x; for(i=0;i<n;i++){ cin>>b; a[b]++; } int count=0; i=0; while(count<x){ i++; if(a[i]==0){ count++; } } while(ture){ i++; if(a[i]==0){ break; } } cout<<i-1<<endl; } return 0; }
B - Dreamoon Likes Permutations
将一组数分成两部分,判断能不能分成两个从1开始连续的数组
最多只有两种可能,(数组的最大值max),(max,n-max),(n-max,max),找出最大值,判断这两种情况能不能成立
int a[200100],c[200100],ans[10][10]; int cnt,n,ma; int cf(int x,int y){ int i; for(i=1;i<=n;i++){ c[i]=0; } for(i=1;i<=x;i++){ c[a[i]]=1; } for(i=1;i<=x;i++){ if(c[i]==0) return 0; } for(i=1;i<=n;i++){ c[i]=0; } for(i=x+1;i<=n;i++){ c[a[i]]=1; } for(i=1;i<=y;i++){ if(c[i]==0){ return 0; } } return 1; } int main() { int k; cin>>k; while(k--){ cin>>n; int ma=-1,cnt=0; for(int i=1;i<=n;i++){ cin>>a[i]; ma=max(ma,a[i]); } if(cf(ma,n-ma)){ cnt++; ans[cnt][1]=ma; ans[cnt][2]=n-ma; } if(ma*2!=n&&cf(n-ma,ma)){ cnt++; ans[cnt][1]=n-ma; ans[cnt][2]=ma; } cout<<cnt<<endl; for(int i=1;i<=cnt;i++){ cout<<ans[i][1]<<" "<<ans[i][2]<<endl; } } return 0; }
C - Exercising Walk
初始位置在(x,y),分别向前后左右走a,b,c,d步,能否在(x1,x2)(y1,y2)这个区域内;
向前走的和向后走的抵消,算出最终位置,在不在区域内,
再判断过程中会不会走出去
int main() { int k,a,b,c,d,x,y,x1,x2,y1,y2; cin>>k; while(k--){ cin>>a>>b>>c>>d; cin>>x>>y; cin>>x1>>y1>>x2>>y2; x=-a+b+x; y=-c+d+y; if(x==x1&&x==x2&&(a||b)||y==y1&&y==y2&&(c||d)) { cout<<"No"<<endl; } else { if(x>=x1&&x<=x2&&y>=y1&&y<=y2) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } } return 0; }
D - Composite Coloring
给一串数涂色,最多涂11个颜色,相同颜色的最大公因数大于1
从2开始的十一个质数,最小的质数因数相同的涂一个颜色
int main() { int k,n,i,a[12]={2,3,5,7,11,13,17,19,23,29,31},b[1010],x,j; cin>>k; while(k--){ cin>>n; int c[15]={0},ccc=0; for(i=0;i<n;i++){ cin>>x; for(j=0;j<11;j++){ if(x%a[j]==0){ if(c[j]!=0){ b[i]=c[j]; }else{ ccc++; c[j]=ccc; b[i]=ccc; } break; } } } cout<<ccc<<endl; for(i=0;i<n;i++){ cout<<b[i]<<" "; } cout<<endl; } return 0; }
E - K-th Beautiful String
找规律,先确实第一个b在第几位,(等差数列求和?),n-sum,就是第二个b的位置
int main() { int k,n,i,j,sum,t; cin>>t; while(t--){ cin>>n>>k; sum=0; for(i=0;;i++){ if(sum+i+1>k-1){ break; } sum+=i+1; } k-=sum+1; for(j=0;j<n;j++){ if(j==n-i-2||j==n-k-1){ cout<<'b'; } else{ cout<<'a'; } } cout<<endl; } return 0; }
F - Carousel
看不懂题目(இωஇ )
我看题解去了