题意大概是这样,给你一个字符串,你能够进行的操作是这种,
每次拿走这个串的第一个字母,或者最后一个字母,然后放到
一个新串的末尾(当然啦,新串一開始是为空的),当把旧串
里的全部字母拿掉,这个时候就形成了一个字母以及长度都跟
旧串一样的新串。如今要求使这个新串的字典序最小。
我的做法是用贪心,每次比較旧串的第一个和末尾的字母,谁小
就放在第一个。遇到两个字母同样的时候,就比較第二个字母和
倒数第二个字母,以此类推。直到找到两个不同的字母为止,假设
前面的小就输出旧串第一个字母,否则就输出末尾字母。
假设都是同样的字母的话呢,随便输出哪个就好了。
我的代码例如以下:
#include<cstdio> int num; char cs[2010]; void init() { char tmp[2]; int i; scanf("%d",&num); for(i=0;i<num;i++) { scanf("%s",tmp); cs[i]=tmp[0]; } } void result() { bool flag=1; int sum,l,r,i; l=sum=0; r=num-1; while(l<=r) { for(i=0;l+i<r-i;i++) if(cs[l+i]<cs[r-i]) { flag=1; break; } else if(cs[l+i]>cs[r-i]) { flag=0; break; } if(flag) { putchar(cs[l]); l++; } else { putchar(cs[r]); r--; } sum++; if(sum%80==0) printf("\n"); } } int main() { init(); result(); }
时间: 2024-10-26 10:01:44