# 585 라운드 Codeforces (사업부. 2) C, D

C 제목 주소 : http://codeforces.com/contest/1215/problem/C

문제의 의미와 동일한 길이의 두 개의 스트링의 "은"두 개의 단일 문자열로 이루어지는 "B"는 임의의 위치에 교환 가능하여, 거기에는, 최소 개수 Q는 두 개의 스트링의 동일한 교환 될 당신은 출력과 동일 될 수 없다 "-1."

아이디어 : 확실히 동일한 교환, AB 및 BA의 수가 홀수 확실히 같은 두 단계 AB가 될 수 없거나 BA는 두 단계로 동일 AB 및 BA가 될 수있다 참조.

AC :( 코드의 제한 수준, 코드 약간 더 양해 바랍니다)

1 #INCLUDE <iostream>
 2 #INCLUDE <cstdio>
 3 #INCLUDE <CString을>
 4  이용한  스페이스 성병;
5 형식 정의  LL;
6  INT 의 main () {
 7      INT N;
8      CIN >> N;
9       S1 [ 200,005 ], S2 [ 200,005 ];
(10)      에 대한이 ( int로 I = 1 ; i가 <= N; I ++ )
 11          CIN >> S1 [I];
12      getchar가 ();
(13)      에 대한( int로 I = 1 ; i가 <= N; I ++ )
 14          CIN >> S2 [I];
15      INT num_ab = 0 , num_ba = 0 ;
16      INT의 AA [ 200,005 ] = { 0 }, AB [ 200,005 ] = { 0 };
(17)      에 대한이 ( int로 I = 1 ; i가 N = <; 내가 ++ ) {
 18 일          경우 (S1 [I] == ' ' &&의 S2 [I] == ' B ' ) {
 19              num_ab을 ++ ;
(20)             단 [num_ab = I;
(21)          }
 (22)          그 밖의  경우 (S1 [I] == ' B ' && S2 [I] == ' ' ) {
 23              num_ba ++ ;
24              AB [num_ba = I;
25         }
 26     }
 27 의 경우 ((+ num_ab num_ba) 1 ) COUT << " -1 " << ENDL;
28 다른 {
 29 일 경우 (num_ab & 1 ) {
 30              COUT << num_ab / 2                     num_ba + / 2 + 2 << ENDL;
(31)              에 대한이 ( int로 I = 1 ; i가 num_ab를 <] + I = 2 )
 32                  COUT << AA [I] << "  " << AA [내가 + 1 ] << ENDL;
(33)              에 대한이 ( 값 int = 1을 1 ; I <num_ba; 난 + = 2 )
 34                  COUT << AB [I] << "  " << AB [내가 + 1 ] << ENDL;
35              COUT << AA [num_ab] << "  " << << AB [num_ba] << ENDL;
(36)          }
 (37)          {
 38              COUT << (num_ab num_ba +) / 2 << ENDL;
(39)              에 대한이 ( int로 I = 1 ; I <= num_ab + I = 2 )
 40                  COUT << AA [I] << "  " << 단 [내가 + 1 ] << ENDL 단계;
41               ( int로 = 1을 1 ; I <= num_ba] + I = 2 )
 42                  COUT << AB [I] << "  " <<43          }
 44      }
 45      반환  0 ;
46 }

D 주제 주소 : http://codeforces.com/contest/1215/problem/D

질문의 의미 : Monocarp 및 Bicarp 두 사람이 티켓 번호 (0-9)를 채우기 위해, 테이블은 하반기의 합과 동일 합 상반기를 작성 후, Bicarp가 이기면, 디지털 테이블에 이미, 그렇지 않으면 Monocarp는 '승리 채워질 수있다 "? , Monocarp 티켓의 수와 모든 짝수 번호의 총 길이 작성 기입합니다.

생각 : 직접 공지 세트의 전반부와 공지 및 SUM1 및 SUM2의 수 Bicarp이기는 고려 각각 후반전 번호 NUM2 채워질 수 있고, 전반 및 NUM1의 후반부에 채울 수있다. 단지 NUM1 NUM2 동일 SUM1 동일 SUM2는 Bicarp는 승리합니다.

SUM1> SUM2은 간단한 분석을 얻을 수 있으면 때 동일한 SUM2의 -sum1 (NUM1-NUM2) * 9/2의 전용 제어 Bicarp (NUM1-NUM2) * 9/2이 수 있기 때문이다. SUM2> 마찬가지로 때 SUM1.

AC 코드 :

1 #INCLUDE <iostream>
 2 #INCLUDE <cstdio>
 3 #INCLUDE <CString을>
 4  이용한  스페이스 성병;
5 형식 정의  LL;
6  INT 의 main () {
 7      INT N;
8      CIN >> N;
9      C;
10      INT NUM1 = 0 , NUM2 = 0 , SUM1 = 0 , SUM2 = 0 ;
(11)      에 대한이 ( int로 I = 1 ; i가 N = <; 내가 ++ ) {
 12          CIN >>씨;
13 일          경우 는 (i <= N / 2 ) {
 14 일              경우 (c == ' ? ' )을 NUM1 ++ ;
15              다른 SUM1 + = (C - ' 0 ' );
(16)          }
 (17)          {
 18 일              경우 (c == ' ? ' ) NUM2 ++ ;
19              다른 SUM2 + = (C - ' 0 ' );
20          }
 21      }
 22      부울 플래그;
23 일      경우 (SUM1> SUM2 && SUM1-SUM2 == (NUM2-NUM1) *9 / 2 ) 플래그 = 거짓 ;
(24)      그 밖의  경우 (SUM1 <SUM2 && SUM2-SUM1 == (NUM1-NUM2) * 9 / 2 ) 플래그 = 거짓 ;
(25)      그 밖의  경우 (SUM1 == SUM2 && NUM1 == NUM2) 플래그 = 거짓 ;
26      다른 플래그 = 진정한 ;
27 일      경우 (플래그) COUT << " Monocarp " << ENDL;
28      다른 COUT << " Bicarp " << ENDL;
29      반환  0 ;
30 }

왜 B와 좋은 쓰기, 너무 불편한 것보다 두 질문을 느낄 않습니다.

추천

출처www.cnblogs.com/xunzf0402/p/11545135.html