[제목] 효과
$ n 개의 $ 게임이 있으며, 각각의 말 값에 능력과 각 말의 가치를 할 수있는 능력을 부여 상대, 두 포인트를 얻을 때마다 승리, 무승부 1 점, 아니 포인트가 손실되지 않습니다. $ n 개의 $을 추구 한 최대 및 최소 점수와 일치합니다.
[분석] 아이디어
$ 달러 (A $)를 기록 배열 상대의 말의 능력 값, 당신의 말의 능력 값을 기록 $ B 형 $ 배열, 두 배열 소형에서 대형에 설정합니다.
첫째, 최대 점수, 우리는 욕심 전략을 가지고 :
1. 현재 상태의 A_ {$ 맥스} <B_ {} 최대 $는 다음 $ B_ {} $ 최대 행 및 $ A_ {} $ 최대 비율의 조건이 만족되지까지를 사용하면
2. 조건이 만족되지 않는 때까지 현재 상태를 $ A_ {분} <B_ {} $ 분, 그때, $ B_ {$ 분}과 $ A_ {} $ 분 비율을 사용하면
3. 위의 두 가지 조건이 다음 $ B_ {} 분에 $ 및 $ A_ {} $ 최대 비율과 더불어 충족되지 않는 경우, 상기 단계를 계속
마지막으로, 당신은 최대 점수 $의 ans_1의 $를 얻을 수 있습니다
최소 점수를 들어, 우리는 패턴을 찾을 수 있습니다 $ 후, 어떤 경우 N $ 2 * n 개의 $의 $ 두 경기 총 점수, 당신은, 최소 점수 위의 방법을 사용하여 최대 $의 ANS을 $ 점수 상대를 찾을 수 있습니다 즉 $ ans_2 = 2 * N-ANS $
[] 코드 구현
1 #INCLUDE <cstdio> 2 #INCLUDE <iostream> 3 #INCLUDE <CString을> 4 #INCLUDE <알고리즘> 5 #INCLUDE <cmath> 6 #DEFINE g () getchar가 () 7 #DEFINE RG 레지스터 8 #DEFINE의 이동 (I A는, b) (RG의 인터넷 용 난 =; 나는 <= B를 단계; 내가 ++) 9 #DEFINE 백 (나는 A는 b) (RG의 인터넷 용 난 =; I> = B, 난 -) 10 # 정의 DB 이중 11 #DEFINE 줄게 긴 길이 12 #DEFINE의 IL 인라인 13 #DEFINE PF printf의 14 이용한 스페이스 성병; (15) INT의 FR () { 16 INT w = 0 , Q = 1 ; 17 숯 CH = g (); 18 일 동안 (CH2 < ' 0 ' || CH> ' 9 ' ) { 19 일 경우 (CH2 == ' - ' ) Q = - 1 ; 20 CH = g (); 21 } 22 동안 (CH2> = ' 0 ' && CH <=에서 ' 9 ' ) = w (w << 1 ) + (w <<0 ' , CH = g ()를; 23 창 * w의 Q; 24 } 25 CONST의 INT의 N = 100,002 ; 26 INT의 N, A [N], 2 [N], ans1, ans2; 27 INT 의 main () { 28 // freopen을 ( "", "R", 표준 입력); 29 // freopen을 ( "", ""w, 표준 출력); (30) N =의 FR (); 31 이동 (I, 1 , N) [I] = B를 FR (); 32 이동 (I, 1 , n)은 [I] =의 FR을 (); 33 정렬 (A + 1 , A + 1 + N) 정렬 (b +의1 , B + 1 + N); 34 의 RG INT 라 = 1 , RA = N, LB = 1 , RB = N; 35 동안 (라 <= RA && LB <= RB) { 36 동안 (라 <= && LB RA <RB && = A [RA] <2 [RB]) 라 -, RB - ans1 + = 2 ; 37 동안 (라 <= && LB RA <RB && = A [라] <2 [LB]) 라 ++, LB ++, ans1 + = 2 ; 38 의 경우 (a [RA] == B [LB]) ans1 ++ ; 39 파운드 ++; ra-- ; 40 } 41 라 = LB = 1 , RA = RB = N; (42) 동안(라 <= RA && LB <= RB) { 43 동안 (라 <= && LB RA <RB && = A [RA]> B [RB]) 라 -, RB - ans2 + = 2 ; 44 동안 (라 <= && LB RA <RB && = A [라]> B [LB]) 라 ++, LB ++, ans2 + = 2 ; 45 의 경우 (a [라] == B [RB]) ans2 ++ ; 46 라 ++; rb-- ; 47 } 48 ans2 = 2 * N- ans2; 49 PF ( " % D % D \ n " , ans1, ans2); 50 반환 0 ; 51 }