2021.08.15(AcWing第十二场周赛+第十一场周赛
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const int maxx=1010; int a[maxx]={0}; int b[maxx]={0}; int num[maxx]={0}; int main(){ int t; scanf("%d",&t); while(t--){ int n; memset(a,0,sizeof a); memset(b,0,sizeof b); memset(num,0,sizeof num); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } int j=0; for(int i=n-1;i>=0;i--){ if(b[a[i]]==0){ num[j++]=a[i]; b[a[i]]++; } } printf("%d\n",j); memset(b,0,sizeof b); for(int i=j-1;i>=0;i--){ printf("%d ",num[i]); } printf("\n"); } }
注:注意数组的初始化问题
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const int maxx=1e5+10; char a[maxx]; int s[maxx]={0}; char ans[maxx]; int main(){ int t; scanf("%d",&t); while(t--){ memset(s,0,sizeof s); int n,k; scanf("%d %d",&n,&k); getchar(); for(int i=0;i<n;i++){ scanf("%c",&a[i]); s[a[i]-'a']++; } if(k>n){ for(int i=0;i<n;i++){ printf("%c",a[i]); } char p='a'; for(int i=0;i<30;i++){ if(s[i]!=0){ p+=i; break; } } for(int i=0;i<k-n;i++){ printf("%c",p); } printf("\n"); continue; } char p='a'; int flagi=0; for(int i=k-1;i>=0;i--){ int flag=0; for(int j=a[i]-'a'+1;j<30;j++){ if(s[j]!=0){ flag++; flagi=i; p+=j; break; } } if(flag!=0){ break; } } char minn='a'; for(int i=0;i<30;i++){ if(s[i]!=0){ minn+=i; break; } } for(int i=0;i<=flagi-1;i++){ printf("%c",a[i]); } printf("%c",p); for(int i=1;i<k-flagi;i++){ printf("%c",minn); } printf("\n"); } }
注:主要是分成两种情况:
1)k>n:这样就输出n个,剩下的k-n个就直接输出字符集中最小的字母
2)k<=n:从后往前找到底是哪个字母使得t的字典序大于s的字典序,找到以后后面的字符都是字符集中最小的那个字母
#include<iostream> #include<algorithm> #include <set> #include<cstdio> #include<cmath> #include<cstring> using namespace std; int main(){ int a[5]={0}; scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]); sort(a,a+4); printf("%d %d %d\n",a[3]-a[2],a[3]-a[1],a[3]-a[0]); }
注:水了水了
4.