那些20分的看过来。
查看原帖
那些20分的看过来。
1284815
canwen楼主2024/4/8 23:28

代码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;
}

服了肝了我快施乐

2024/4/8 23:28
加载中...