結果
| 問題 |
No.7 プライムナンバーゲーム
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-02-25 17:41:48 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 13 ms / 5,000 ms |
| コード長 | 1,481 bytes |
| コンパイル時間 | 1,011 ms |
| コンパイル使用メモリ | 118,844 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-01 16:30:56 |
| 合計ジャッジ時間 | 1,826 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <cmath>
#include <iomanip>
#include <stack>
#include <queue>
#include <numeric>
#include <map>
#include <unordered_map>
#include <set>
#include <fstream>
#include <chrono>
#include <random>
#include <bitset>
#define rep(i,n) for(int i=0;i<(n);i++)
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) ((int)(x).size())
#define pb push_back
#define mod 1000000007
using ll = long long;
using namespace std;
ll gcd(ll a, ll b) {return b?gcd(b,a%b):a;}
ll lcm(ll a, ll b) {return a/gcd(a,b)*b;}
/*
2 -> lose
3 -> lose
4 = 2+2 -> win
5 = 2+3 -> win
6 = 3+3 -> win
7 = 2+5 -> win
8 = 3+5 -> win
9 = 2+7 -> win
10 = 3+7 -> win
11 = 2+9 = 3+8 = 5+6 = 7+4 -> lose
12 = 2+10 = 3+8 = 5+7 -> lose
*/
int main(){
int N; cin >> N;
vector<bool> nums(10001,true);
nums[0] = nums[1] = false;
for(int i=1; i<=10000; i++){
if(nums[i]){
int p = i*2;
while(p<=10000){
nums[p] = false;
p += i;
}
}
}
vector<int> ps;
rep(i,sz(nums)) if(nums[i]) ps.pb(i);
vector<bool> win(10001,false);
for(int i=2; i<=10000; i++){
if(i==2 || i==3){
continue;
}
bool won = false;
rep(j,sz(ps)){
if(i-ps[j]<2) break;
if(win[i-ps[j]] == false) won = true;
}
if(won) win[i] = true;
}
//rep(i,13) cout << win[i] << " ";
cout << (win[N]?"Win":"Lose") << endl;
return 0;
}