方法:暴力贪心
解析:
先想暴力,拿队首队尾最小的扔进去。
如果一样?缩队首队尾一直比,知道有结果或者不能缩为止。
复杂度?
只有AAAAAAAAAAAAADAAAAAAAAAAAAA这种类型的串能卡死吧?不然n^2左右。
不敢写?
虚什么,默念这题水题这题水题这题水题,然后就写好暴力了,4.6s水过。
做完查题解,什么?后缀数组?这我也不会啊,挖坑把。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 30010
using namespace std;
int n;
char s[2];
char ss[N];
char print[N];
int tot;
int check(int l,int r)
{
while(l<r)
{
if(ss[l]==ss[r])l++,r--;
else if(ss[l]<ss[r])return 1;
else return 0;
}
return 1;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s);
ss[i]=s[0];
}
int tmpl=1,tmpr=n;
while(tmpl<=tmpr)
{
if(ss[tmpl]<ss[tmpr])
{
print[++tot]=ss[tmpl];
tmpl++;
}else if(ss[tmpl]>ss[tmpr])
{
print[++tot]=ss[tmpr];
tmpr--;
}else
{
if(check(tmpl,tmpr))print[++tot]=ss[tmpl],tmpl++;
else print[++tot]=ss[tmpr],tmpr--;
}
}
for(int i=1;i<=tot;i++)
{
printf("%c",print[i]);
if(i%80==0)printf("\n");
}
if(tot%80!=0)printf("\n");
}