문제 보고서에 bzoj1034 티안 지의 말 솔루션

주제 포털

[제목] 효과

$ 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 }
코드는 여기 찌를

추천

출처www.cnblogs.com/THWZF/p/11543409.html