POJ 3617Best Cow Line(字典序最小的字符串)

来源:互联网 发布:贾斯汀比伯 知乎 编辑:程序博客网 时间:2024/05/17 05:52

题目链接:http://poj.org/problem?id=3617

【中文题意】给定长度为n的字符串s,要构造一个长度为n的字符串T。起初,T是一个空串,随后反复进行以下任意操作。
1.从S的头部删除一个字符,加到T的尾部。
2.从S的尾部删除一个字符,加到T的尾部。
目标是构造字典序尽可能小的字符串T。
【思路分析】
只需比较剩余正序序列和剩余倒序序列那个更小就可以了,然后取小的第一个,假如相同,取任意一个都可以。反复进行上述操作。
【AC代码】

#include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<queue>#include<stack>#include<map>#include<algorithm>using namespace std;#define N 2005int n;char str[N];void solve(){    int cnt=0;    int a=0,b=n-1;    while(a<=b)    {        bool left=false;        for(int i=0;a+i<=b;i++)        {            if(str[a+i]<str[b-i])            {                left=true;                cnt++;                break;            }            else if(str[a+i]>str[b-i])            {                cnt++;                left=false;                break;            }        }        if(left)putchar(str[a++]);        else putchar(str[b--]);        if(cnt % 80 ==0)        {            printf("\n");        }    }    printf("\n");}int main(){    while(~scanf("%d",&n))    {        for(int i=0;i<n;i++)        {            cin>>str[i];        }        solve();    }    return 0;}
0 0