POJ3617 Best Cow Line【贪心】

Description 
给定长度为n的字符串S,要构造一个长度为n的字符串T。起初,T是空串,随后反复进行下列任意操作: 
1、从S的头部删除一个字符,加到T的尾部 
2、从S的尾部删除一个字符,加到T的尾部 
目标是构造字典序最小的字符串T(1<=n<=2000) 
Input 
第一行为字符串长度n,之后n行每行一个字符,字符串只包含大写字母 
Output 
输出字典序最小的字符串T,输出时一行只能输出80个字符 
Sample Input 







Sample Output 
ABCBCD 

思路:每次比较头尾大小,如果相等就继续比较第二个和倒数第二个,贪心的思想。

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=2005;
char str[maxn];
int n;
void pailie()
{
    int a=0,b=n-1,count=0;
    while(a<=b)
    {
        bool flag=true;
        for(int i=0;i<=b-a;++i)
        {
            if(str[a+i]>str[b-i])
            {
                flag=false;
                break;
            }
            else if(str[a+i]<str[b-i])
            {
                flag=true;
                break;
            }
        }
        if(flag)
        {
            putchar(str[a++]);
            ++count;      //计数,一行满80个字符就换行
        }
        else
        {
            putchar(str[b--]);
            ++count;
        }
        if((count+1)%80 == 0)
            putchar('\n');
    }
   //putchar('\n');
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;++i)
        cin>>str[i];
    pailie();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41785863/article/details/82595694