SGU 153 - Playing with matches(博弈)
2013-07-26 16:31
274 查看
题意:有一堆火柴,A和B取,谁先取完谁就输了,每人只能取ai个(1<=ai<=9)和1个
循环节不会超过2^9,打出SG表,然后暴循环节
#include <stdio.h>
#include <string.h>
int a[12],n,m;
int SG[1060],hash[1060];
void GetSG(int Array[], int N)
{
int i, j;
memset(SG, 0, sizeof(SG));
for(i = 0; i <= N; i++)
{
memset(hash, 0, sizeof(hash));
for(j = 0; j<=m; j++)
{
if(i-Array[j]>0)
hash[SG[i - Array[j]]] = 1;
}
for(j = 0; j <= N; j++)
{
if(hash[j] == 0)
{
SG[i] = j;
break;
}
}
}
}
int main()
{
int T;
a[0]=1;
scanf("%d",&T);
while(T--)
{
memset(SG,0,sizeof(SG));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
scanf("%d",&a[i]);
GetSG(a,1050);
int k=0;
for(int l=512;l>=1;l--)
{
if(memcmp(SG+10,SG+10+l,l*sizeof(int))==0)
{
k=l;break;
}
}
if(n<9)
{
if(SG
>0)printf("FIRST PLAYER MUST WIN\n");
else printf("SECOND PLAYER MUST WIN\n");
}
else
{
if(SG[9+(n-9)%k]>0)printf("FIRST PLAYER MUST WIN\n");
else printf("SECOND PLAYER MUST WIN\n");
}
}
return 0;
}
循环节不会超过2^9,打出SG表,然后暴循环节
#include <stdio.h>
#include <string.h>
int a[12],n,m;
int SG[1060],hash[1060];
void GetSG(int Array[], int N)
{
int i, j;
memset(SG, 0, sizeof(SG));
for(i = 0; i <= N; i++)
{
memset(hash, 0, sizeof(hash));
for(j = 0; j<=m; j++)
{
if(i-Array[j]>0)
hash[SG[i - Array[j]]] = 1;
}
for(j = 0; j <= N; j++)
{
if(hash[j] == 0)
{
SG[i] = j;
break;
}
}
}
}
int main()
{
int T;
a[0]=1;
scanf("%d",&T);
while(T--)
{
memset(SG,0,sizeof(SG));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
scanf("%d",&a[i]);
GetSG(a,1050);
int k=0;
for(int l=512;l>=1;l--)
{
if(memcmp(SG+10,SG+10+l,l*sizeof(int))==0)
{
k=l;break;
}
}
if(n<9)
{
if(SG
>0)printf("FIRST PLAYER MUST WIN\n");
else printf("SECOND PLAYER MUST WIN\n");
}
else
{
if(SG[9+(n-9)%k]>0)printf("FIRST PLAYER MUST WIN\n");
else printf("SECOND PLAYER MUST WIN\n");
}
}
return 0;
}
相关文章推荐
- SGU 153 Playing with matches (博弈,循环节)
- sgu153 Playing with matches (博弈dp)#by nobody
- sgu153: Playing with matches
- sgu 153 Playing with matches
- UESTC 1661 Playing With Stones 博弈打表
- sgu153:Playing with matches
- Codeforces Round #184 (Div. 2) E. Playing with String(博弈)
- Could not find any matches for com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+ as no versions处理
- playing with ptrace(Part I) 之四 --- Single-Stepping
- Playing with Paper -CodeForces - 527A
- Playing with ptrace, Part II
- 【数学基础01】Playing with Paper
- EXT 快速上手(Playing With Ext The Easy Way)
- 解题报告:Codeforces Round #432 (Div. 2) E.Arpa and a game with Mojtaba (博弈)
- Replace Matches with Replacements Generated in Code (用函数作为替换体来替换匹配)
- Playing with ptrace, Part I
- [转]Playing with ptrace,Part I/II
- A. Playing with Paper
- 中国海洋大学第四届朗讯杯高级组 Playing Fair with Cryptography
- 10067 - Playing with Wheels