poj 3617(Best Cow Line)

題意:輸入字符串S,得出字符串T。只能進行如下操作:1.從S的頭部刪除一個字符,加到T的尾部。2.從S的尾部刪除一個字符,加到T的尾部。

思路1:比S較開頭和末尾字符串的大小,將較小的加入T的尾部,但此思路在遇到S開頭和末尾相同的情況需要考慮其下一個字符的大小。

例如:S=“ACDBCB”,首先拋出A,其次拋出B,在第三次比較時S="CDBC",開頭和結尾的字符相同,爲了保證T的最小字典序需要觀察S的下一組字符。

思路二:將S反轉得到SS,如果S較小就從S開頭取出,如果SS較小就從SS開頭取出即S的末尾。相同的話則取哪個都行。

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
using namespace std;
int n;
char a[2001],aa[2001],ts[2001];
int main()
{
    scanf("%d",&n);
    getchar();
    for(int i=0;i<n;i++)
    {
        scanf("%c",&a[i]);
        aa[n-i-1]=a[i];
        getchar();
    }
    int s=0,t=n-1;
    for(int i=0;i<n;i++)
    {
        if(strcmp(a,aa)<0)
        {
            ts[i]=a[0];
            for(int j=1;j<n-i;j++)
               a[j-1]=a[j];
        }
        else
        {
            ts[i]=aa[0];
            for(int j=1;j<n-i;j++)
               aa[j-1]=aa[j];
        }
        putchar(ts[i]);
        if((i+1)%80==0)//控制輸出格式
            printf("\n");
    }

    printf("\n");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章