细节写死我QAQ,全场最长。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
char ch=getchar();int f=0;
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){f=(f<<1)+(f<<3)+ch-'0';ch=getchar();}
return f;
}
char s[135];bool n_ok[135],vis[135];
char st[125][125];int len[125],now1,now2;
void out()
{
memset(n_ok,0,sizeof(n_ok));
for(int i=1;i<=now1;i++)
{
if(st[i][1]>='a'&&st[i][1]<='z') n_ok[i]=1;
if(len[i]==1) n_ok[i]=1;
for(int j=2;j<=len[i];j++)
{
if(st[i][j]>='A'&&st[i][j]<='Z') n_ok[i]=1;
}
}
int last=0;
for(int i=1;i<=now1;i++)
{
if(n_ok[i])
{
if(last==1)
{
for(int j=1;j<=len[i-1];j++)
{
printf("%c",st[i-1][j]);
}
printf(" ");
for(int j=1;j<=len[i];j++)
{
printf("%c",st[i][j]);
}
if(i!=now1)
printf(" ");
}
else if(last==0)
{
for(int j=1;j<=len[i];j++)
printf("%c",st[i][j]);
if(i!=now1)
printf(" ");
}
else
{
for(int j=i-last;j<i;j++)
printf("%c",st[j][1]);
printf(" (");
for(int j=i-last;j<i;j++)
{
for(int k=1;k<=len[j];k++)
{
printf("%c",st[j][k]);
}
if(j!=i-1)
printf(" ");
}
printf(")");
printf(" ");
for(int j=1;j<=len[i];j++)
{
printf("%c",st[i][j]);
}
if(i!=now1)
printf(" ");
}
last=0;
}
else
{
last++;
}
}
if(last==1)
{
for(int j=1;j<=len[now1];j++)
{
printf("%c",st[now1][j]);
}
}
else if(last==0){}
else
{
for(int j=now1-last+1;j<=now1;j++)
printf("%c",st[j][1]);
printf(" (");
for(int j=now1-last+1;j<=now1;j++)
{
for(int k=1;k<=len[j];k++)
{
printf("%c",st[j][k]);
}
if(j!=now1)
printf(" ");
}
printf(")");
}
}
int main()
{
while(1)
{
memset(vis,0,sizeof(vis));
char ch;int n=0;
while(ch=getchar())
{
if(ch=='\n'||ch==EOF) break;
s[++n]=ch;
}
int l=1,r=1;now1=0,now2=0;
while(r<=n)
{
if((s[r]>='a'&&s[r]<='z')||(s[r]>='A'&&s[r]<='Z'))
{
if((s[r-1]>='a'&&s[r-1]<='z')||(s[r-1]>='A'&&s[r-1]<='Z'))
{
st[now1][++now2]=s[r];
}
else
{
len[now1]=now2;
now1++;now2=0;
st[now1][++now2]=s[r];
}
}
else if(s[r]==' ')
{
if((s[r-1]>='a'&&s[r-1]<='z')||(s[r-1]>='A'&&s[r-1]<='Z')){}
else
{
len[now1]=now2;
out();
now1=0;now2=0;
if(s[r-1]==' '&&s[r-2]!=' '&&!vis[r-1])
{
printf("%c",s[r-1]);
vis[r-1]=1;
}
printf("%c",s[r]);
vis[r]=1;
}
}
else
{
len[now1]=now2;
out();
if(s[r-1]==' '&&s[r-2]!=' '&&!vis[r-1])
{
printf("%c",s[r-1]);
vis[r-1]=1;
}
now1=0;now2=0;
printf("%c",s[r]);
vis[r]=1;
}
r++;
}
if(now2)
len[now1]=now2;
out();
if(ch==EOF)
break;
puts("");
}
}