SG 函式初步 HDU 1536 && HDU 1944
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1944
http://acm.hdu.edu.cn/showproblem.php?pid=1536
給定每一次可以取的石頭數,給定很多種情況,每一種情況有若干堆石頭,判斷先手勝負。
SG函式打表,然後直接抑或,判斷結果是否為0,第一次寫SG函式,貼個程式碼,慢慢理解。
程式碼:
/* ***********************************************
Author :rabbit
Created Time :2014/7/4 12:00:18
File Name :3.cpp
************************************************ */
#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <string>
#include <time.h>
#include <math.h>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pi acos(-1.0)
typedef long long ll;
int f[110],d[20010],g[110];
int SG(int p,int k){
memset(g,0,sizeof(g));
for(int i=0;i<k;i++){
int t=p-f[i];
if(t<0)break;
if(d[t]==-1)d[t]=SG(t,k);
g[d[t]]=1;
}
for(int i=0;;i++)
if(!g[i])return i;
}
int main()
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int n;
while(~scanf("%d",&n)){
if(!n)break;
for(int i=0;i<n;i++)scanf("%d",&f[i]);
sort(f,f+n);
memset(d,-1,sizeof(d));
d[0]=0;
for(int i=1;i<=10010;i++)
d[i]=SG(i,n);
int m;
scanf("%d",&m);
while(m--){
int k;
scanf("%d",&k);
int sum=0,v;
while(k--){
scanf("%d",&v);
sum^=d[v];
}
if(!sum)printf("L");
else printf("W");
}
puts("");
}
return 0;
}
相關文章
- HDU 1848 Fibonacci again and again(SG函式)AI函式
- HDU 1848 Fibonacci again and again (尼姆博弈+sg函式)AI函式
- HDU 5795 A Simple Nim (SG函式+打表找規律)函式
- HDU 1709 The Balance(母函式)函式
- hdu 2111 Saving HDU (DP)
- Shape of HDU
- HDU 3349
- NIM遊戲/SG函式遊戲函式
- HDU 2052(C語言+註釋)+HDU 2090C語言
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- HDU 1240 Asteroids!AST
- hdu2083
- hdu5532
- HDU4787
- hdu5540
- HDU 4921 Map
- HDU 3661 Assignments
- hdu 6415 - DP
- HDU 1729 Stone GameGAM
- HDU 3590 PP and QQ
- HDU 2570 迷瘴
- hdu1069javaJava
- hdu1025javaJava
- HDU Find the hotel(RMQ)MQ
- HDU 6060 RXD and dividing
- Switch Game HDU - 2053GAM
- HDU1024(dp)
- HDU - 6182 A Math Problem
- hdu2011javaJava
- HDU 2612 Find a way
- HDU6415(DP)
- HDU 3400 Line belt
- HDU 1236 排名(Java)Java
- hdu 4370(最短路)
- HDU 不要62 題解
- hdu2600 C++C++
- hdu 1232通暢工程
- hdu1195 Open the Lock
- HDU 1711 Number Sequence(KMP)KMP