题目地址:poj 3623
题目大意:可以从串的两端选取,求尽可能字典序小的串
直接暴力 ,关键是两端的字符相同的情形,这个时候要用快排那样的扫描方法。
一旦扫到了head 和tail 相遇甚至是穿过了还是没有找到不同的,这说明是对称的,随便先移除前面 后面 都行。
再就是注意一下输出 每80个换行 而且最后一行如果不是刚换过行了还是要换行
代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
char s[30005];
int main()
{
int n;
cin>>n;
char ch;
for(int i=0;i<n;i++)
cin>>s[i];
int count=0;
int ii=0,jj=n-1;
while(ii<=jj)
{
int flag=0;
for(int l=0;l+ii<=jj-l;l++)
{
if(s[ii+l]<s[jj-l])
{
flag=0;
break;
}
else if(s[ii+l]>s[jj-l])
{
flag=1;
break;
}
}
if(flag==0)
{
cout<<s[ii];
ii++;
}
else
{
cout<<s[jj];
jj--;
}
count++;
if(count%80==0) cout<<endl;
}
if(count%80!=0) cout<<endl;
}