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 저자가 저작권. 상업 무단 전재 저자 권한은 비상업적 무단 전재 소스를 표시하시기 바랍니다 문의하시기 바랍니다.