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와 좋은 쓰기, 너무 불편한 것보다 두 질문을 느낄 않습니다.