POJ3617 Best Cow Line

问题分析,从S串头部删除一个字符,加到T的尾部

从S的尾部删除一个字符加到T的尾部,构造尽可能小的T串

S="ACDBCB"     -->    S="CDBCB"   -->   S=“CDBC“ --> S="CDB"

T=""        T="A"      T="AB"   T="ABC"

          头           尾       尾

贪心,按照字典序比较S和将S反转后的字符串S'

如果S较小,从头取

否则,从尾取

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;

int main()
{
    int N;
    while(scanf("%d",&N)!=EOF)
    {

        getchar();
        char T[2010];
        char str[2010];
        for(int i = 0; i < N; i++)
        {
            scanf("%c",&str[i]);
            getchar();
        }
        int l = 0,r = N-1;
        char s1[2010],s2[2010];
        int cnt = 0;
        while(l <= r)
        {
            for(int i = l; i <= r; i++)
            {
                s1[i-l] = str[i];
                s2[r-i] = str[i];
            }
            s1[r+1-l] = '\0';
            s2[r+1-l] = '\0';
            if(strcmp(s1,s2) <= 0)
            {
                T[cnt++] = str[l];
                l++;
            }
            else
            {
                T[cnt++] = str[r];
                r--;

            }

        }
        T[cnt] = '\0';
        int t = 0;
        for(int i = 0; i < cnt;i++)
        {
            t++;
            printf("%c",T[i]);
            if(t==80)
            {
                printf("\n");
                t=0;
            }
        }
        printf("\n");
    }

    return 0;
}

 

posted @ 2018-04-13 20:48  unknownname  阅读(121)  评论(0编辑  收藏  举报