더 소 오프 2019 여름 학교의 세 번째

B 题 : 미친 이진 문자열

 

아주 분명하다 가장 긴 01 B의 타이틀 시퀀스

우리는 0,1의 두 배 수의 최소에 걸릴 수 있으므로, 이것은 분명 최고의이나 잘입니다

 

그러나 우리는 우리가 어떻게 01 문자열 균형 그것을 작동,입니까?

0에서 1의 같은 수의, 01만큼 두 개의 서로의 말을 제거 할 수 있습니다 01에 대응하는 2 개의 중간에 홀수 비트, 심지어 해당 비트를 위해 서로를 취소 :이 시리즈 그것의 본질이 무엇인지 매우 순진한 생각인가

우리는이의 기여를 계산할 수 있도록, 그것은 단지 확인에 문제가 있습니다

 

이,이 후 8 11,000,011 될 수 있으며, 이와 같은 문제가있다, 벨 아이디어를 확인 후 반 길이이며, 또한 충분한 4하지 않습니다   

이 예제를 만들어에 대해 젊은 어떻게, 나는 아 몰라? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

이것은 또한 의지 부족하지만 자신의 이해에 의존   

여기에 코드입니다 :

1 #INCLUDE <cstdio>
 2 #INCLUDE <CString을>
 3 #INCLUDE <알고리즘>
 4 #INCLUDE <iostream>
 5 #INCLUDE <cmath>
 6 #INCLUDE <비트 세트>
 7 의 typedef  LL;
8  사용  스페이스 성병;
9  CONST  INT maxn = ( INT ) (1E5 + 2,000 );
10  INT N;
11  S [maxn];
12  INT qilen [maxn * 2 ] oulen [maxn * 2 ];
13  INT주 () {
 14      는 scanf ( " %의 D ' , N);
15      는 scanf ( " %들 " , + S (1) );
16      memset 함수 (qilen - 1 , 를 sizeof () qilen);
17      memset 함수 (oulen - 1 , 를 sizeof () oulen);
18      INT CNT0 = 0 , CNT1 = 0 ;
19      INT ANS = 0 ;
20      oulen [maxn] = 0 ;
21      INT Q = maxn;
(22)      //COUT << Q << ENDL; 
23       ( INT 난 = 1 ; 나는 <= N; I ++ ) {
 24 일          경우 (S [I] == ' 0 ' ) CNT0 ++ ;
25          다른 CNT1 ++ ;
26          의 경우 (S [I] == ' 0 ' ) q-- ;
(27)          다른 Q ++ ;
28         // COUT << Q << ENDL; 
29 일          경우 (I % 2 == 1 ) {
 30 일              경우 (qilen [Q] == - 1 ) qilen [Q]를 = I를;
(31)              다른 {
32                  년 = 최대 (10 세 (I qilen [Q]));
33              }
 34          } 다른 {
 35              의 경우 (Oulen [Q] == - 1 ) Oulen [Q] = I;
36              그렇지 년 = 최대 (10 세 I Oulen [Q]);
37          }
 38      }
 39      의 printf ( " % D % D \ n " , 년 2 * 분 (CNT0, CNT1));
40      반환  0 ;
41 }
코드보기

 

H 题 : 매직 라인

이 질문 후, 우리는 먼저 가장 간단한 아이디어 중 하나가 일종의 배수 순서의 두 개의 반쪽으로 분할하는 방법에 대해 생각해야한다   

이 짝수이기 때문에, 중간 자연스럽게 발생

그런 다음 중간 지점 확인에 지점을 분리 특히 두 1E9, -1e9으로 구분이 여전히 아주 좋은 작업입니다. 아마 모두의 갑작스러운 제거 할 수

여기에 코드입니다 :

1 #INCLUDE <cstdio>
 2 #INCLUDE <CString을>
 3 #INCLUDE <알고리즘>
 4 #INCLUDE <iostream>
 5 #INCLUDE <cmath>
 6 #INCLUDE <비트 세트>
 7 의 typedef  LL;
8  사용  스페이스 성병;
9  CONST  INT maxn = 1,100 ;
10  CONST 최대 = LL (LL) (1E9);
11  의 INT t, N;
12  구조체 포인트 {
 13      LL의 XI 이순신;
14  };
15  점의 합계 [maxn];
16  
17  부울 CMP (점 P1, 점 P2) {
 18 일      경우 (p1.xi == p2.xi)  p1.yi < p2.yi;
19      다른  반환 p1.xi < p2.xi;
20  }
 21  
22  INT의 주 () {
 23      는 scanf ( " %의 D " , t);
24 일      동안 (t-- ) {
 25          는 scanf ( " %의 D ' , N);
26           ( INT 나 = 1 ; i가 <= N; I ++)는 scanf ( " % LLD % LLD ", 합계 [I] .xi, 합계 [I] .yi);
27          정렬 (합계 + 1 , 합계 + N + 1 , CMP);
28          INT m = N / 2 ;
29 일          경우 (합 [m] == .xi 합 [m + 1 ] .xi) {
 30              의 경우 ((합 [m + 1 ] .yi 합 [m] .yi) % 2 == 1 ) {
 31                  의 printf ( " LLD LLD % % % % LLD LLD \ n " , 합계 [m] .xi- 1 (LL) (3E8) + 합 [m + 1 ] .yi, 합계 [m] .xi + 1 , 합계 [m] .yi - (LL) (3E8));
32              } 다른 {
33                  LL의 Y = SUM ([M + 1 ] + .yi 합 [m] .yi) / 2 ;
34                  의 printf ( " % LLD % LLD % LLD % LLD \ n " , 합계 [m] .xi- 1 (LL) (3E8) + Y, 합계 [m] .xi + 1 , Y - (LL) (3E8) );
35              }
 36          } 다른 {
 37              LL에서, Y = (+ .yi 합 [m + 합 [m] 1 ] .yi) / 2 ;
38              의 printf ( " % LLD % LLD % LLD % LLD \ n " , 합계 [m] .xi, Y + (LL) (3E8), 합계 [m + 1 ] .xi, Y- (LL) (3E8));
39          }
40      }
 41      반환  0 ;
42 }
코드보기

 

 

F 题 : 나무 심기

이 후, 우리가 어떻게해야합니까? ? ? ? ?

첫째, 우리는 우리가 자신의 데이터에 따라, 최대 범위를 얻으려면, 이러한 상황이 필요 철저한 것이 뭔가 것을 알고 것을 알고,이 단어는 찾으려고 우리에게 있습니다.

나는 모든 트랙이 도로 시뮬레이션 ACM 제목의 문제라고 생각, 그는 당신에게 우리가 이러한 조건에서, 응용 프로그램을 위로 조건을주고 일까지 이러한 응용 프로그램 중 하나를 사용하여 속성을 발견하고, 마지막됩니다

우리는이 주제에 온 접근 방식의 특성에 따라,이 ACM 질문의 일반적인 관행입니다

    

추천

출처www.cnblogs.com/pandaking/p/12112464.html