최고의 암소 라인 <도전 프로그래밍 경연 대회> 연습

P2870 [USACO07DEC] 최고의 소 선, 골드 라인 암소 베스트, 골드
3617 POJ http://poj.org/problem?id=3617

题目描述
FJ 경쟁 매년 "올해의 농부"에 소 (50 ≤ 1 ≤ N) 자신의 N을하는 것입니다. 이 대회에서 모든 농부는 선에서 자신의 소를 배치하고 심사 위원 과거를 무리.

대회 조직위원회는 올해 신규 등록 방식을 채택 : (FJ 그는 단지 BSD를 등록 순서대로 베시, 실비아, 그리고 도라 걸리는 경우, 즉) 단순히이 나타납니다 순서대로 모든 젖소의 첫 글자를 등록합니다. 등록 단계 종료 후, 각 그룹은 젖소의 이름의 이니셜의 문자열에 따라 사전 편찬 증가하는 순서로 판정한다.

FJ는 올해 매우 바쁜이며, 자신의 농장에 다시 서둘러해야하고, 그래서 그는 가능한 한 빨리 판단되고 싶어. 그는 그들을 등록하기 전에, 이미 줄을 한 자신의 소를 재 배열하기로 결정합니다.

FJ는 경쟁 젖소의 새로운 라인의 위치를 ​​표시합니다. 그 후 반복적으로 새로운 라인의 끝에 원래 선 (의 나머지)에서 첫 번째 또는 마지막 소 중 하나를 전송하여 새에 이전 줄에서 소를 마샬링로 진행한다. 그는이 완료 때, FJ는이 새로운 순서로 등록 자신의 소를합니다.

그의 암소의 초기 주문을 감안할 때, 그는이 방법을 만들 수있는 글자의 최소 사전 식 문자열을 결정합니다.

단지 양쪽에서 취할 수있는 최소 요구 사항은 사전 식 후에 촬영

입력 형식
* 행 1 : 단일 정수 : N

라인 2..N + 1 : 광고 나 + 1 ( 'A'.. 'Z') 원 라인의 i 번째 위치에 암소의 단일 초기 포함
输出格式
그가 할 수있는 상기 사전 식 스트링. (아마도 마지막 제외) 모든 라인은 새로운 라인 80 개 소 ( 'A'.. 'Z')의 이니셜이 포함되어 있습니다.

견본

입력
 . 6 
C 
D 
B 
C를 
B에 
출력 
ABCBCD

간단히 말해서, 이는 테일 출력 문자열 전적으로 작은 큐의 헤드에있어서 입력 문자열의 출력이 문자열로부터 추출

알고리즘 1
우리를 조금 욕심 사전 편찬하는 꼬리를 선택하는 첫 번째 팀 분대를 선택합니다.
첫번째 팀 스쿼드의 핵심은하지만 편지는 ACA의 VAV의 AA와 다른 경계 조건 등을 고려하기 위해 동일한 사전 편찬 시대의 끝을 확인합니다.
해결해야
Tucao POJ가 제출되지 및 오류 메시지에서. 그것에 대해 좋은 루오 구가 데이터 량도 TLE의 코드에 내 카드를 증가이다

C ++ 코드

사용법 #include <iostream> 
#INCLUDE <큐> 
#INCLUDE < 문자열 > 사용 스페이스 성병; 문자 입력 [ 500,010 ];
 출력 [ 500,010 ];
INT의 IDX; INT   SelectCopy ( INT의 L, INT의 R) 
{ 경우 (L> = R) 1 ; 경우 (입력 [L] < 입력 [R]) {
          - 1 ; 
    } 다른 경우 (입력 [1]> 입력 [R]) {
         

 






     

    
       1 ; 
    } 
    다른 {
         INT의 copyl = L + 1 ; INT copyr R = - 1 ;
        반환 SelectCopy (copyl, copyr)를; 
    } 

    반환  0 ; 
} 


무효 선택 ( INT의 L, INT의 R) 
{ 
    경우 (L == R) 출력 {[IDX = 입력 [1,5]을; IDX ++; 반환 ; }
     경우 (L> R) ; 

    경우 (입력 [L] < 입력 [R]) { 
        출력 [IDX] = 입력 [1]; 
        IDX ++; 리터 ++; 
    } 
    다른  경우 (입력 [1]> 입력 [R]) { 
        출력 [IDX] = 입력 (R); 
        IDX ++; r-- 사용 ; 
    } 
    다른 {
         // 相等
        INT copyl = L + 1 ; INT copyr R = - 1 ;
        INT selectidx = SelectCopy (copyl, copyr);
        만약 (- 1 == selectidx) { 
            출력 [IDX] = 입력 [1]; 
            IDX ++; 리터 ++ ; 
        } 
        다른  경우( 1 == selectidx) { 
            출력 [IDX] = 입력 (R); 
            IDX ++; r-- 사용 ; 
        } 
    } 

    경우 (L <= R) { 
        선택 (L, R); 
    } 

} 


INT 의 main () 
{ 
    INT의 N; 
    CIN >> N;
    위한 ( int로 난 = 0 ; i가 N을 <I ++는 {)
         t; 
        CIN >> t; 
        입력 [I] =의 t; 
    } 

    INT를 L = 0; 지능 R & LT = N - 1이다. ] 

    선택 (L, R 및 LT는) 
    을 위해 ( int로 I = 0 ; I는 <IDX를, I는 ++ ) {
         IF (I의 % 80 == 0 && I> = 80 ) COUT << ENDL; 
        COUT < < 출력은 [내가]; 
    } 

    반환  0 ; 
} 

저자 : defddr의 
링크 : HTTPS를 : // www.acwing.com/blog/content/178/ 
소스 : AcWing 
저자가 저작권. 상업 무단 전재 저자 권한은 비상업적 무단 전재 소스를 표시하시기 바랍니다 문의하시기 바랍니다.

 

추천

출처www.cnblogs.com/itdef/p/11285844.html