# 588 라운드 Codeforces (사업부. 2) D 마르신 및 교육 캠프

 

첫 느낌에서 DP의 제목입니다 ,,,하지만 신중하게 데이터에있는 데이터를 읽을 후 매우 작습니다. . . . . . 그 때 나는 생각의 질문을 느낍니다.

 

 

아이디어 :     

 

    사람이 선택 사항 인 경우, 그것은 그와 동일한 값의 사람이거나 바이너리의 같은 값에, 하나는 일이 걸릴 수 있습니다. 그것을 설명

 

 

      예를 들어, 예를 들면 :  

 

 

 

 

 

 

  이 경우에는 모든 규정 준수 규칙에 여전히 시간이 걸릴 수 있지만 없습니다. (그러나 어떠한 전이 없음)

 

 

 

 

1 #INCLUDE <iostream>
 2 #INCLUDE <큐>
 3 #INCLUDE <cstdlib>
 4 #INCLUDE <CString을>
 5 #INCLUDE <알고리즘>
 6  이용한  스페이스 성병;
7  
8 타입 정의  LL;
9  CONST의  INT의 MAXN = 7010 ;
10  LL의 B [MAXN, N, ANS, CNT;
11 LL 입술 [MAXN] [ 62 ];
12  구조체 의 {
 13      LL 자료, A, B;
14  } A [MAXN];
15  부울 CMP ( CONST S & ACONST 들 및 b)
 16  {
 17      하다면 ! (AA = BA)
 18          리턴 AA < BA;
19      리턴 a.id < b.id;
20  }
 21  무효 체크 (LL TMP)
 22  {
 23      LL의 p = 60 ;
24 일      동안 (TMP) {
 25          입술 [CNT] [P] = TMP 및 1 ;
26          p-- ;
27          TMP는 >> = 1 ;
28      }
 29      반환 ;
30  }
(31)  보이드 CHECK1 ( INT I)
 32  {
 33      LL 온도 [ 62 ], p = 60 ;
34      memset 함수 (온도, 0 , 는 sizeof (TEMP));
(35)      동안은 (a는 [I]는 .A) {
 36          온도가 [P]가 = A [i]를 .A 및 1 ;
37          p-- ;
38          A [i]를 .A >> = 1 ;
39      }
 40       ( INT J = 1 ; J <= CNT; J ++ ) {
 41          부울 플래그 = 거짓 ;
42           ( INT에서 K = 0 ; K <= 60 ; k는 ++ ) {
 43              의 경우 (입술 [J] [K] == 0 && 온도 [K] == 1 ) {
 44                  플래그 = ;
(45)                  휴식 ;
46              }
 47          }
 48          의 경우 (플래그 == 거짓 ) {
 49 개              의 ANS의 ANS = + A [i]를 .B;
50              체류 ;
51          }
 52      }
 53      ;
54  }
55  INT 의 main ()
 56  {
 57      A [ 0 ] .A = - 1 ;
58      ANS = CNT = 0 ;
59      CIN >> N;
(60)      에 대한이 ( int로 I = 1 ; i가 N = <; 내가 ++ ) {
 61          CIN >> A [i]를 .A;
62          A [i]를 .ID = I;
63      }
 64       ( int로 I = 1 ; i가 N = <; 내가 ++ ) {
 65          CIN >> A [i]를 .B;
66      }
 67      정렬 (a +1 , A + N + 1 , CMP);
68      큐 <LL> Q;
(69)      동안 (! q.empty ())
 70          q.pop ();
(71)      에 대한이 ( int로 I = 2 ; i가 N = <; 내가 ++ ) {
 72          의 경우 (a [i]를 .A == A [I- 1 ] .A && A [I- 1 !] .A = A [I- 2 ] .A) {
 73              q.push (a [i]를 .A);
(74)              (CNT) ++ ;
(75)              검사 (A [i]를 .A);
76          }
 77      }
 78       ( INT I =1 ; 나는 <= N; 내가 ++ ) {
 79          CHECK1 (I);
80      }
 81      COUT << ANS << ENDL;
82      반환  0 ;
83 }

 

 

 

 

 

 

 

 

 

 

추천

출처www.cnblogs.com/q1204675546/p/11598996.html