結果
| 問題 |
No.7 プライムナンバーゲーム
|
| コンテスト | |
| ユーザー |
mannshi222
|
| 提出日時 | 2022-04-28 21:51:43 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 11 ms / 5,000 ms |
| コード長 | 1,112 bytes |
| コンパイル時間 | 937 ms |
| コンパイル使用メモリ | 86,780 KB |
| 最終ジャッジ日時 | 2025-01-28 22:12:54 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#include <iostream>
//#include <stdbool>
#include <vector>
#include <cmath>
using namespace std;
#define MAXN 10000
vector<bool> dp(MAXN);
vector<int> plist(MAXN);
int psize;
void makedp(int n)
{
dp[0] = dp[1] = true;
dp[2] = false;
for( int i = 3; i <= n ; i++ ) {
dp[i] = false;
for( int j = 0; plist[j] <= i && j < psize; j++ ) {
if( dp[i - plist[j]] == false ) {
dp[i] = true;
break;
}
}
}
}
bool isprime( int n )
{
if( n == 2 || n == 1) {
return true;
}
for( int i = 2; i <= sqrt(n); i+=1 ) {
if( n % i == 0 ) {
return false;
}
}
return true;
}
void makeprime( int n ) {
for( int i = 2; i < n; i++ ) {
if( isprime( i ) ) {
plist[psize++] = i;
}
}
}
int main()
{
int N;
cin >>N;
makeprime(N);
/*
for( int i = 0; i < psize; i++ ) {
cout << plist[i] << " ";
}
cout << endl;
*/
makedp(N);
/*
for( int i = 0; i <= N; i++ ) {
if( dp[i] == true ) {
cout << i << " WIN" << endl;
}
else {
cout << i << " LOSE" << endl;
}
}
/**/
if( dp[N] == true ) {
cout << "Win" << endl;
}
else {
cout << "Lose" << endl;
}
return 0;
}
mannshi222