代码11~19行是20分的输入,会超时 反正洛谷换行符决定不止是\n那么简单,还是EOF暴力过比较安全 AC代码:
#include<iostream>
#include<string>
using namespace std;
int zimu[28][200],tmp[28][200];
char ans[28][200];
int tj[27];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int flag=0;
/*for(int i=1;i<=4;i++){
char a;
while((a=getchar())!='\n'){
if(a=='\r'){
a=getchar();break;
}
if(a>='A'&&a<='Z') tj[a-'A'+1]++;
}
}*/
char zimmmm;
while((zimmmm=getchar())!=EOF) {
if(zimmmm>='A'&&zimmmm<='Z') tj[zimmmm-'A'+1]++;
}
for(int i=1;i<=26;i++){
zimu[i][1]=i;
}
for(int i=1;i<=26;i++){
if(tj[i]==0) continue;
int j,t=2;
for(j=1;j<=tj[i];j++){
zimu[i][j+1]=-1;
}
}
int max=0;
for(int i=1;i<=26;i++){
if(tj[i]>max) max=tj[i];
}
int tmpp=1,tmjj=0;
for(int j=max+1;j>=1;j--){
tmjj=0;
for(int i=1;i<=26;i++){
if(zimu[i][j]>=1&&zimu[i][j]<=26) ans[tmpp][++tmjj]=(char)('A'+zimu[i][j]-1);
else if(zimu[i][j]==-1) ans[tmpp][++tmjj]='*';
else ans[tmpp][++tmjj]=' ';
}
while(ans[tmpp][tmjj]==' ') tmjj--;
ans[tmpp][++tmjj]='a';
tmpp++;
}
for(int i=1;i<=tmpp-1;i++){
for(int j=1;j<=50;j++){
if(ans[i][j]=='a'){
if(i==tmpp-1) break;
cout<<endl;break;
}
if(ans[i][j+1]!='a')cout<<ans[i][j]<<" ";
else cout<<ans[i][j];
}
}
return 0;
}
服了肝了我快施乐