zoukankan      html  css  js  c++  java
  • bzoj1640 [Usaco2007 Nov]Best Cow Line 队列变换

    Description

    FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加”年度最佳老农”的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛中简单地将奶牛的名字缩写为其头字母(the initial letter of every cow),举个例子,FJ带了Bessie, Sylvia,和Dora,那么就可以缩写为BSD. FJ只需将奶牛的一个序列重新排列,然后参加比赛.他可以让序列中的第一头奶牛,或者最后一头走出来,站到新队列的队尾. 利欲熏心的FJ为了取得冠军,他就必须使新队列的字典序尽量小. 给你初始奶牛序列(用头字母)表示,然后按照上述的规则组成新序列,并使新序列的字典序尽量小.

    Input

    第1行:一个整数N.

    第2行至第N+1行:每行一个大写字母,表示初始序列中该奶牛的头字母.

    Output

    得到的最小字典序的序列.每输出80个字母需要一个换行!

    Sample Input

    6
    A
    C
    D
    B
    C
    B

    Sample Output

    ABCBCD

    HINT

     

    贪心
     
    每次比较队首和队尾,不相等的话直接取小的。
    相等的话就一直向内找,取先找到更小的那一边。
    (老年zz选手竟把n打成char类型的)
    注意每输出80个字符要换行
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 char a[2020],b[2020];
     6 int n;
     7 bool check(int l,int r){
     8     while(l<=r){
     9         if(a[l]<a[r]) return 1;
    10         if(a[r]<a[l]) return 0;
    11         ++l;--r;
    12     }return 0;
    13 }
    14 int main(){
    15     scanf("%d",&n);
    16     for(int i=0;i<n;++i) cin>>a[i];
    17     int l=0,r=n-1,L=0;
    18     while(l<=r){
    19         if(a[l]<a[r]) b[L++]=a[l++];
    20         else if(a[r]>a[l]) b[L++]=a[r--];
    21         else if(check(l,r)) b[L++]=a[l++];
    22         else b[L++]=a[r--];
    23     }
    24     for(int i=1;i<=n;++i){
    25         printf("%c",b[i-1]);
    26         if(i%80==0) printf("
    "); 
    27     }return 0;
    28 }
    View Code
  • 相关阅读:
    javascript之Number
    javascript之window对象
    javascript全局对象
    javascript之尺寸,位置,溢出
    javascript之DOM操作
    javascript之全局函数
    javascript之Error
    javascript之url转义escape()、encodeURI()和decodeURI()
    javascript之Boolean
    javascript之Arguments
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/10017813.html
Copyright © 2011-2022 走看看