调了两个小时了……
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
const int maxn=1e3+5;
const int maxm=185;
int l[maxn],tmp[maxn],li[maxn],maxx;
string s[maxn],a[maxn],ans[maxn];
string str[maxn][maxm];
int t,n;
void init(){
maxx=0,n=0;
for(int i=1;i<=1000;i++){
s[i]="",a[i]="",l[i]=0,tmp[i]=0,li[i]=0;
for(int j=1;j<=180;j++){
str[i][j]="";
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t){
init();
while(1){
getline(cin,s[n]);
if(s[n]=="@"){
t--;
break;
}
l[n]=s[n].size();
s[n]=" "+s[n];
n++;
}
n--;
for(int i=1;i<=n;i++){
bool flag=1;
for(int j=1;j<=l[i];j++){
if(s[i][j]==' '&&flag==1) continue;
else flag=0;
if(s[i][j]==' '&&s[i][j-1]==' ') continue;
a[i]+=s[i][j];
}
l[i]=a[i].size();
}
for(int i=1;i<=n;i++){
a[i]=" "+a[i];
tmp[i]++;
for(int j=1;j<=l[i];j++){
if(a[i][j]==' '){
tmp[i]++;
continue;
}
str[i][tmp[i]]+=a[i][j];
}
if(maxx<tmp[i]) maxx=tmp[i];
}
for(int i=1;i<=maxx;i++){
for(int j=1;j<=n;j++){
int sum=str[j][i].size();
if(li[i]<sum) li[i]=sum;
}
}
for(int i=1;i<=maxx;i++){
for(int j=1;j<=n;j++){
int tot=str[j][i].size();
if(tot<li[i]){
int cnt=li[i]-str[j][i].size();
while(cnt--) str[j][i]=str[j][i]+" ";
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=maxx;j++){
ans[i]+=(str[i][j]+' ');
}
l[i]=ans[i].size();
}
for(int i=1;i<=n;i++){
for(int j=l[i]-1;j>=0;j--){
if(ans[i][j]==' '){
l[i]--;
}
else break;
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<l[i];j++){
cout<<ans[i][j];
}
cout<<endl;
}
}
return 0;
}