BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换【string】
1640: [Usaco2007 Nov]Best Cow Line 队列变换
【题目描述】
传送门
【题解】
一眼一看就有个想法,找小的放,但是你不能兼顾后面的,这里一组反例。
4
B
A
B
B或
4
B
B
A
B所以我们可以构造正反两个字符串,比较两个字符串的大小,较小的先放就可以了。
代码如下
#include<cstdio>
#include<iostream>
using namespace std;
int n;
string S1,S2;
int main(){
#ifndef ONLINE_JUDGE
freopen("prob.in","r",stdin);
freopen("prob.out","w",stdout);
#endif
scanf("%d",&n);getchar();
for(int i=1;i<=n;i++){
char ch=getchar();getchar();
S1+=ch;S2=ch+S2;
}
for(int i=1;i<=n;i++){
if(S1<S2){printf("%c",S1[0]);S1.erase(0,1);S2.erase(n-i+1,1);}
else{printf("%c",S2[0]);S2.erase(0,1);S1.erase(n-i+1,1);}
if(i%80==0) printf("\n");
}
return 0;
}