POJ3617 (贪心&Java)

描述

FJ即将带着他的N ( 1≤N≤2000 )头奶牛参加一年一度的“年度最佳农民”比赛。在这场比赛中,每个农民都将他的奶牛排成一排,然后赶着它们通过评委。 比赛组织者今年采用了一种新的注册方案:只需按照每头牛出现的顺序注册它们的首字母(即,如果 FJ 按照 Bessie、Sylvia 和 Dora 的顺序注册 BSD)。报名阶段结束后,根据奶牛姓名首字母的串,按字典序升序对各组进行评判。 FJ今年很忙,要赶回自己的农场,所以他想尽早接受审判。他决定在登记前重新安排已经排好队的奶牛。 FJ 标志着一个新的竞争奶牛系列的位置。然后,他通过重复将原始线路(剩余)中的第一头或最后一头奶牛发送到新线路的末端,继续将奶牛从旧线路编组到新线路。完成后,FJ 带着他的奶牛在这个新订单中登记。 给定他的奶牛的初始顺序,确定他可以用这种方式制作的最少字典序的首字母串。

输入

 第 1 行:单个整数:N 第 2.. N +1 行:第i +1 行包含原始行中第i个位置的奶牛的单个首字母 ('A'..'Z')

输出

他能做的最少的字典字符串。每行(可能除了最后一行)在新行中包含 80 头奶牛的首字母 ('A'..'Z')。


样例

输入

6 
A 
C 
D 
B 
C 
B

输出

ABCBCD
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(new BufferedInputStream(System.in));
        while (in.hasNext()) {
            int N=in.nextInt();
            char[]S=new char[N];
            for (int i = 0; i < N; i++) {
                 S[i]=in.next().charAt(0);
            }
            int a=0,b=N-1, cnt=0;
            while (a<=b){
                boolean left=false;
                for (int i=0;a+i<=b; i++){
                    if(S[a+i]S[b-i]) {
                        left=false;
                        cnt++;
                        break;
                    }
                }
                if (left) {
                    System.out.print(S[a++]);
                }else {
                    System.out.print(S[b--]);
                }
                if(cnt%80==0){
                    System.out.println();
                }

            }
            System.out.println();



        }
    }
}

 

你可能感兴趣的:(编程算法,java,算法)