結果
問題 | No.1267 Stop and Coin Game |
ユーザー |
|
提出日時 | 2020-10-24 01:14:29 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 51 ms / 2,000 ms |
コード長 | 2,243 bytes |
コンパイル時間 | 1,338 ms |
コンパイル使用メモリ | 125,632 KB |
最終ジャッジ日時 | 2025-01-15 14:48:57 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 43 |
ソースコード
/*** author: otera**/#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<algorithm>#include<functional>#include<iomanip>#include<queue>#include<deque>#include<ciso646>#include<random>#include<map>#include<set>#include<complex>#include<bitset>#include<stack>#include<unordered_map>#include<unordered_set>#include<utility>#include<cassert>#include<array>using namespace std;#define int long longtypedef long long ll;typedef unsigned long long ul;typedef unsigned int ui;typedef long double ld;const int inf=1e9+7;const ll INF=1LL<<60 ;const ll mod=1e9+7 ;#define rep(i,n) for(int i=0;i<n;i++)#define per(i,n) for(int i=n-1;i>=0;i--)#define rep1(i,n) for(int i=1;i<=n;i++)#define per1(i,n) for(int i=n;i>=1;i--)typedef complex<ld> Point;const ld eps = 1e-8;const ld pi = acos(-1.0);typedef pair<int, int> P;typedef pair<ld, ld> LDP;typedef pair<ll, ll> LP;#define fr first#define sc second#define all(c) c.begin(),c.end()#define pb push_backtemplate<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }int n;ll v;vector<ll> a;bool used[(1<<21)][2];bool memo[(1<<21)][2];bool dfs(int bit, int now) {if(used[bit][now]) return memo[bit][now];int sum = 0;rep(i, n) {if(bit & (1<<i)) sum += a[i];}if(sum > v) {used[bit][now] = 1;return memo[bit][now] = true;}rep(i, n) {if(!(bit & (1<<i))) {if(!dfs(bit | (1<<i), 1 - now)) {used[bit][now] = 1;return memo[bit][now] = true;}}}used[bit][now] = 1;return memo[bit][now] = false;}void solve() {cin >> n >> v;a.resize(n);ll sum = 0;rep(i, n) {cin >> a[i];sum += a[i];}if(sum <= v) {cout << "Draw" << endl;} else {cout << (dfs(0, 0) ? "First" : "Second") << endl;}}signed main() {ios::sync_with_stdio(false);cin.tie(0);//cout << fixed << setprecision(10);//int t; cin >> t; rep(i, t)solve();solve();return 0;}