結果
| 問題 |
No.7 プライムナンバーゲーム
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2014-11-01 05:32:40 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 16 ms / 5,000 ms |
| コード長 | 770 bytes |
| コンパイル時間 | 477 ms |
| コンパイル使用メモリ | 61,812 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-01 15:27:27 |
| 合計ジャッジ時間 | 1,190 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 10000;
vector<int> ps;
void sieve(){
vector<bool> isp(MAX + 10, true);
for(int p=2;p*p<=MAX;p++)if(isp[p]){
for(int kp=p*p;kp<=MAX;kp+=p)isp[kp] = false;
}
for(int p=2;p<=MAX;p++)if(isp[p])ps.push_back(p);
}
bool done[MAX + 10], dp[MAX + 10];
bool solve(int N){
if(N <= 1){
return true;
}
if(done[N])return dp[N];
bool res = false;
for(int i=0;i<ps.size() && ps[i]<=N;i++){
res |= !solve(N - ps[i]);
}
done[N] = true;
return dp[N] = res;
}
int main(){
sieve();
int N;
cin >> N;
cout << (solve(N) ? "Win" : "Lose") << endl;
return 0;
}