HDU 5795 A Simple Nim (sg函数 打表)
2016-08-08 15:24
337 查看
思路:
看到数据范围的一刹那就应该有一种暴力不能解的感觉。再加上他说要分堆,可以把一堆分成三堆,这样也是一种状态的转移,不过,当堆里的石子数量很大的时候,可以分成三堆的情况是特别多的。。。这样的话在用sg函数进行深搜时估计会爆栈。。。
所以了,打表吧,用暴力的方式把前100个数的sg值都算出来,你会发现这么一个规律
if(n % 8 == 0) —— sg(n) = n + 1;
if(n % 8 == 7) —— sg(n) = n - 1;
其他的都和普通Nim一样,sg(n) = n;
已经知道了sg值,那不是很简单了。。。
AC代码:
#include <iostream> #include <cstdio> #include <string.h> using namespace std; /*打表代码 int dp[200]; int sg(int n){ if(dp != -1)return dp ; int has[110]; memset(has,-1,sizeof(has)); for(int i = 1;i <= n;i++){ has[sg(n-i)]++; } for(int i=1;i<n;i++){ for(int j=1;j<n;j++){ for(int k=1;k<n;k++){ if((i+j+k)==n){ has[(sg(i)^sg(j)^sg(k))]++; } } } } for(int i = 0; i < 110;i++){ if(has[i] == -1) return dp = i; } return 1000000000000; } int main(){ dp[0] = 0; memset(dp,-1,sizeof(dp)); for(int i = 1;i < 100;i++){ sg(i); } if(dp[0] == 0){ int i = 1; } return 0; }*/ int sg(int n){ if(n % 8 == 0) return n - 1; if(n % 8 == 7) return n + 1; else return n; } int main() { int t; cin>>t; int n; int temp; int ans; while(t--){ scanf("%d",&n); scanf("%d",&ans); ans = sg(ans); for(int i = 2;i <= n;i++){ scanf("%d",&temp); ans ^= sg(temp); } if(ans) printf("First player wins.\n"); else printf("Second player wins.\n"); } return 0; }
相关文章推荐
- HDU-5795-A Simple Nim-博弈(SG函数)打表找规律
- HDU 5795 A Simple Nim (SG函数+打表找规律)
- HDU 5795 A Simple Nim 打表求SG函数的规律
- HDU-5795 A Simple Nim(SG函数打表找规律)
- HDU 5795 A Simple Nim(SG打表找规律)——2016 Multi-University Training Contest 6
- HDU 5795 A Simple Nim(SG打表找规律)
- hdu 5795 A Simple Nim (sg函数)
- hdu 5795 A Simple Nim(SG打表找规律)
- sg函数+nim博弈+打表_______A Simple Nim(hdu 5795 2016多校第六场)
- HDU 3032 Nim or not Nim? && HDU 5795 A Simple Nim (Lasker's Nim游戏、SG函数、取走-分割游戏)
- HDU 5795 A Simple Nim 详解(SG打表找规律,博弈好题)
- 【博弈+SG函数+打表找规律】HDU_5795_A Simple Nim
- hdu_5795_A Simple Nim(打表找规律的博弈)
- (HDU 5795)2016 Multi-University Training Contest 6 A Simple Nim (SG函数、博弈)
- HDU 5795 A Simple Nim (博弈 打表找规律)
- hdu 5795 A Simple Nim 博弈sg函数
- [ACM] hdu 1536 S-Nim(Nim组合博弈 SG函数打表)
- hdu 1536 &&hdu1944 S-Nim (sg函数打表)
- [ACM] hdu 1536 S-Nim(Nim组合博弈 SG函数打表)
- HDU 5795 A Simple Nim