POJ:3617 Best Cow Line

一道简单贪心。我还是考虑不全面。

比较原串首位第一个不相同的字母,然后决定删除的方向。注意不是只比较一个字母。

如果只比较原串首尾第一个字母,如果两者相同就任意取的话,DCED这种样例是过不了的,即使过了DECD这个样例是过不了的。

所以正确的思路是如果两者相同就比较下一对字母。。注意是下一对。

另外每80个字符要换行。比较坑爹。。

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    int n;
    char str[2005];
    while(scanf("%d",&n)!=EOF)
    {
        memset(str,0,sizeof(str));
        for(int i=0; i<n; ++i)
        {
            char tmp[5];
            scanf("%s",tmp);
            str[i]=tmp[0];
        }
        int rear=0;
        char ans[20005]= {0};
        int a=0,b=strlen(str)-1;
        while(a<=b)
        {
            bool left=false;
            for(int i=0; i<=b-a; ++i)
                if(str[a+i]<str[b-i])
                {
                    left=true;
                    break;
                }
                else if(str[a+i]>str[b-i])
                {
                    left=false;
                    break;
                }
            if(left)
                ans[rear++]=str[a++];
            else  ans[rear++]=str[b--];
        }
        ans[rear]=0;
        int l=strlen(ans);
        for(int i=0; i<l; ++i)
        {

            printf("%c",ans[i]);
            if(((i+1)%80==0)||i==l-1)  printf("\n");
        }
    }
    return 0;
}


 

你可能感兴趣的:(贪心)