반야와 CodeForces 저울 - 552C를 (생각)

효과 : $ A $ 101 중량, 중량을 w $ ^ 0 ^ w 1, ..., 100 $ ^ w를 칭량 $ 찾을 수의 m을 $.

 

<= 3 승 분명히, 그렇지 않으면 당신은 이중 종료 할 수있는 검색 폭력을 모든 무게를 호출 할 수 있습니다 때.

사용법 #include <iostream> 
#INCLUDE <sstream> 
#INCLUDE <알고리즘> 
#INCLUDE <cstdio> 
#INCLUDE <math.h> 
#INCLUDE <설정> 
#INCLUDE <지도> 
#INCLUDE <unordered_map도> 
#INCLUDE <큐> 
#INCLUDE < 문자열> 
#INCLUDE <string.h> 
#INCLUDE <비트 세트> 
#DEFINE REP (I, A, N)에 대해 INT (나는 A =; I <= N; ++ I) 
#DEFINE PER (I, A, N) 경우 (나는> = A, I는 = N에서 INT - I) 
#DEFINE 열연 putchar (10) 
#DEFINE PB와 push_back 
#DEFINE LC (O << 1) 
#DEFINE의 RC (LC | 1) 
#DEFINE 미드 ((L + R) >> 1) 
#DEFINE의 LS의 LC, L, 중간 
#DEFINE 중계국의 RC 중간 + 1R 
#DEFINE 먼저 X 
#DEFINE Y 제 
#DEFINE IO 표준 : IOS :: sync_with_stdio (FALSE)
N '\'를 #DEFINE의 ENDL
#DEFINE DB (a) (REP {(__ I, 1, N) COUT << A [__ 난] << ', HR}) 
를 사용 스페이스 성병; 
타입 정의 오래 오래 LL; 
쌍 타입 정의 <INT, INT> PII; 
CONST INT의 P = 1E9 + 7, P2 = 998,244,353, INF = 0x3f3f3f3f; 
LL의 GCD (LL A, LL의 b) {리턴 B GCD (B, A % B)을?를} 
LL의 qpow (LL A, LL 않음) {LL의 R = 1 % P] (a % = P에 대한 n은 ; A = A * %의 P, N >> = 1)의 경우 (n은 1) R = R *는 %의 P, 리턴 R} 
LL의 반전 (LL의 X) {반환 X <= 1 : INV (P %의 X) * (PP / X) %의 P} 
인라인 INT의 RD () {INT (X) = 0; 숯 p = getchar가 (); 반면 (p <0 || p> '9') p = getchar가 () ; 반면 (p> = 0 && p <= '9') (X) = (X) * 10 + P-'0 'p = getchar가 (); 리턴 X} 
// 헤드 




INT, m w; 
LL이 [100]; 
unordered_map도 <LL, INT> F [2]; 
보이드 DFS (INT의 D, INT의 MX, LL NUM, unordered_map도 <LL, INT> &
	또 { 
		DFS (d + 1, MX, NUM + A [D], F); 
		DFS (d + 1, MX, NUM-A [D], F); 
	} 
} 

INT의 main () { 
	는 scanf ( "%의 D % d에", w, m); 
	만약 (w <= 3) 창 둔다 ( "YES"), 0; 
	이제 1 = 어떠냐; 
	REP (Ⅰ 경우 0) { 
		A는 [++ *는 이제 =; 
		지금 * = w; 
	} 
	DFS (1 * A / 2,0, F [0]); 
	DFS (* A / 2 + 1, *는 0, F [1]); 
	대 (자동 && t : F [0]) { 
		경우 리턴 둔다 ( "YES") ([1] .count (t.x m + F)), 0; 
	} 
	둔다 ( "NO"); 
}

 

 

실제로 더 나은 방법이있다.

사용법 #include <iostream> 
#INCLUDE <sstream> 
#INCLUDE <알고리즘> 
#INCLUDE <cstdio> 
#INCLUDE <math.h> 
#INCLUDE <설정> 
#INCLUDE <지도> 
#INCLUDE <unordered_map도> 
#INCLUDE <큐> 
#INCLUDE < 문자열> 
#INCLUDE <string.h> 
#INCLUDE <비트 세트> 
#DEFINE REP (I, A, N)에 대해 INT (나는 A =; I <= N; ++ I) 
#DEFINE PER (I, A, N) 경우 (나는> = A, I는 = N에서 INT - I) 
#DEFINE 열연 putchar (10) 
#DEFINE PB와 push_back 
#DEFINE LC (O << 1) 
#DEFINE의 RC (LC | 1) 
#DEFINE 미드 ((L + R) >> 1) 
#DEFINE의 LS의 LC, L, 중간 
#DEFINE 중계국의 RC 중간 + 1R 
#DEFINE X는 제 
#DEFINE Y 초 
#DEFINE IO 표준 : IOS :: sync_with_stdio (FALSE)
N '\'를 #DEFINE의 ENDL 
#DEFINE DB (a) (REP {(__ I, 1, N) COUT << A [__ 난] << ', HR}) 
를 사용 스페이스 성병; 
타입 정의 오래 오래 LL; 
쌍 타입 정의 <INT, INT> PII; 
CONST INT의 P = 1E9 + 7, P2 = 998,244,353, INF = 0x3f3f3f3f; 
LL의 GCD (LL A, LL의 b) {리턴 B GCD (B, A % B)을?를} 
LL의 qpow (LL A, LL 않음) {LL의 R = 1 % P] (a % = P에 대한 n은 ; A = A * %의 P, N >> = 1)의 경우 (n은 1) R = R *는 %의 P, 리턴 R} 
LL의 반전 (LL의 X) {반환 X <= 1 : INV (P %의 X) * (PP / X) %의 P} 
인라인 INT의 RD () {INT (X) = 0; 숯 p = getchar가 (); 반면 (p <0 || p> '9') p = getchar가 () ; 반면 (p> = 0 && p <= '9') (X) = (X) * 10 + P-'0 'p = getchar가 (); 리턴 X} 
// 헤드 





{) (주 INT 
	, m w INT ; 
	scanf와 ( "%의 D % d에", w, m); 
	반면 (m) { 
		경우 ((m-1) == 0 w %) --m; 
		++ m 다른 경우 (== 0 W (m + 1) %);
		다른 (m에서의 w %) 복귀 둔다 ( "NO")의 경우, 0; 
		m / = w; 
	}
	풋 ( "YES"); 
}

 

추천

출처www.cnblogs.com/uid001/p/10951071.html