結果
| 問題 |
No.7 プライムナンバーゲーム
|
| コンテスト | |
| ユーザー |
nCk_cv
|
| 提出日時 | 2016-02-06 17:42:48 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 274 ms / 5,000 ms |
| コード長 | 1,217 bytes |
| コンパイル時間 | 2,187 ms |
| コンパイル使用メモリ | 77,972 KB |
| 実行使用メモリ | 43,644 KB |
| 最終ジャッジ日時 | 2024-10-01 15:40:46 |
| 合計ジャッジ時間 | 6,158 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {
static ArrayList<Integer> pl;
static int[][] memo;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
pl = new ArrayList<Integer>();
boolean[] isntPrime = new boolean[n+1];
pl.add(2);
for(int i = 3; i <= n; i += 2) {
if(!isntPrime[i]) pl.add(i);
for(int j = i + i; j <= n; j += i) {
isntPrime[j] = true;
}
}
memo = new int[2][n+1];
dfs(true,n);
if(memo[0][n] == 1) System.out.println("Win");
else System.out.println("Lose");
}
static boolean dfs(boolean a,int b) {
if(a) {
if(memo[0][b] != 0) return memo[0][b]==1?true:false;
for(int i = 0; i < pl.size(); i++) {
if(b - pl.get(i) <= 1) break;
boolean ret = dfs(false,b - pl.get(i));
if(ret) {
memo[0][b] = 1;
return true;
}
}
memo[0][b] = -1;
return false;
}
else {
if(memo[1][b] != 0) return memo[1][b]==1?true:false;
for(int i = 0; i < pl.size(); i++) {
if(b - pl.get(i) <= 1) break;
boolean ret = dfs(true,b - pl.get(i));
if(!ret) {
memo[1][b] = -1;
return false;
}
}
memo[1][b] = 1;
return true;
}
}
}
nCk_cv