USACO 2007 November Silver Best Cow Lineoj21653

mac2022-06-30  26

题目大意:

输入n 接下来n行字母 在队头和队尾中选出较小的放入新的队列

Sample Input

6ACDBCB

Sample Output

ABCBCD

  注意相同的情况 先判断内层的大小 输出小的一边 如 BCADCB -> CADCB -> CADC -> ADC -> DC -> D   这题21653和26220和22713无数提交TLE WA 过程完全没毛病 磨了很久发现是输入的问题 一开始吸收一直用 getchar(); 但oj系统是Linux 不需要吸收\r,所以WA TLE也可能是因为getchar();一直在等待吸收一个字符 导致程序没有结束 而 getchar(); scanf("%c",&ch); 可以用这种方式代替 scanf(" %c",&ch); 即在%c前加一个空格 #include <bits/stdc++.h> using namespace std; char a[2005]; bool judge(int head,int tail) { //printf("\n%c %c\n",a[head],a[tail]); if(head>=tail) return 0; if(a[head]<a[tail]) return 1; else if(a[head]>a[tail]) return 0; else return judge(head+1,tail-1); } int main() { int n; while(~scanf("%d",&n)) { a[0]=0; for(int i=1;i<=n;i++) scanf(" %c",&a[i]); int head=1,tail=n,cnt=0; while(head<=tail) { if(cnt==80) { printf("\n"); cnt=0; } //printf("\n%c%c\n",a[head],a[tail]); if(a[head]<a[tail]) printf("%c",a[head++]); else if(a[tail]<a[head]) printf("%c",a[tail--]); else { if(judge(head+1,tail-1)==1) printf("%c",a[head++]); else printf("%c",a[tail--]); } cnt++; } printf("\n\n"); } return 0; } View Code

 

转载于:https://www.cnblogs.com/zquzjx/p/8584206.html

最新回复(0)