ヴァーニャとCodeForcesスケール - 552Cを(思考)

効果:$ $ 101の重み、1 ^ wの重量の$ W ^ 0は、...、^ 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、N)のために(INT iは=; I <= N; ++ I)
の#define PER(I、N) - (I; I> = A I = N INT)のため
の#defineのHRのputchar(10)
の#define PB一back 
の#define LC(O << 1)
(| 1 LC)の#define RC 
の#define中間((L + R)>> 1)
の#define LSのLC、L、中
の#define RSのRC、ミッド+ 1、R 
の#define X最初
の#define yの第二
の#define IOのstd :: IOS :: sync_with_stdio(偽)
の#define ENDL '\ n'は
#define DB(A)({REP(__ I、1、n)はCOUT << [__ I] <<」「;}時間)
名前空間stdを使用。
typedefの長い長いLL。
typedefのペア<int型、int型> PII。
CONST int型P = 1E9 + 7、P2 = 998244353、INF = 0x3f3f3f3f。
LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} 
のLL qpow(-1,11,11- n)で{LLのR = 1%P;(%= Pのために、N ; = *%P、N >> = 1)であれば(N - 1)R = R *%のP、リターンR;} 
?LL INV(LL X){X <= 1を返す:INV(P%以下X)*(PP / X)%P;} 
インラインint型RD(){int型のx = 0; CHAR 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、整数> F [2]。
無効DFS(int型D、int型MX、LL NUM、unordered_map <LL、整数>&
	他{
		DFS(D + 1、MX、NUM + [D]、F)。
		DFS(D + 1、MX、NUM-[D]、F)。
	} 
} 

int型のmain(){ 
	scanf関数( "%D%dの"、&W、&M)。
	(W <= 3)戻りプット( "YES")場合、0。
	今= 1っ。
	REP(I、0,16){ 
		[++ * A]今=。
		今* =ワット; 
	} 
	DFS(1、* / 2,0、F [0])。
	DFS(* / 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、N)のために(INT iは=; I <= N; ++ I)
の#define PER(I、N) - (I; I> = A I = N INT)のため
の#defineのHRのputchar(10)
の#define PB一back 
の#define LC(O << 1)
(| 1 LC)の#define RC 
の#define中間((L + R)>> 1)
の#define LSのLC、L、中
の#define RSのRC、ミッド+ 1、R 
の#define X最初
の#define yの第二
の#define IOのstd :: IOS :: sync_with_stdio(偽)
の#define ENDL '\ n'は
#define DB(A)({REP(__ I、1、n)はCOUT << [__ I] <<」「;}時間)
名前空間stdを使用。
typedefの長い長いLL。
typedefのペア<int型、int型> PII。
CONST int型P = 1E9 + 7、P2 = 998244353、INF = 0x3f3f3f3f。
LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} 
のLL qpow(-1,11,11- n)で{LLのR = 1%P;(%= Pのために、N ; = *%P、N >> = 1)であれば(N - 1)R = R *%のP、リターンR;} 
?LL INV(LL X){X <= 1を返す:INV(P%以下X)*(PP / X)%P;} 
インラインint型RD(){int型のx = 0; CHAR P = GETCHAR();一方、(P < '0' || P> '9')p = GETCHAR() ;一方、(P> = '0' && P <= '9')、X = X * 10 + P-'0' 、P = GETCHAR();戻りX;} 
//ヘッド





{main()の整数
	、M W INT ; 
	scanf関数( "%d個の%のD"、&W、&M)。
	一方、(M){ 
		IF((M-1)== W%0)--m。
		M / W =。
	}
		他M(== 0 W(M + 1)%)++であれば、
		他の(m個の%w)をリターンプット( "NO")場合には、0。
	プット( "YES"); 
}

 

おすすめ

転載: www.cnblogs.com/uid001/p/10951071.html