摘要: 自认为sg函数应该算是博弈论中比较经典的东西了。。他几乎可以解决博弈论中的所有问题。你可以将sg函数看作是一个深搜的的过程。而每一堆的石子就相当于图中间的节点。所以说整个sg函数的过程就是在对一个有向无环图进行dfs的过程。sg函数的具体内容可以用一个公式来表示(虽然我最不喜欢公式,不过我还是得写。不然这没法说清楚):sg(x) =mex{sg(y) : y ∈ F(x)}。其中{}内的是一个集合(只要上过高中都应该知道吧),在:右边的是该集合元素所满足的条件。sg(y)为该元素的值(其实就是一个递归的过程)。重点来了。。mex()函数表示是不在该集合中的最小的非负整数的值。比如mex({1, 阅读全文
posted @ 2012-07-31 21:00 77695 阅读(4282) 评论(2) 推荐(2) 编辑
摘要: 方法就是将该组测试数据中所有的数据进行异或计算。得出结果为0则为必输,不为零必胜。#include<iostream>using namespace std;const int MAXM=102;int main(){ int M; while(cin>>M) { int num[MAXM]; if(M==0) { break; } int i=0; for(i=0;i<=M-1;i++) { cin>>num[i]; }... 阅读全文
posted @ 2012-07-31 20:41 77695 阅读(520) 评论(0) 推荐(0) 编辑
摘要: 写出各个状态的必胜还是必输状态即可发现规律。。假设m为2把。。01234567必输必胜必胜必输必胜必胜必输必胜这样就可以看出规律直接判断余数即可。。#include<iostream>using namespace std;int main(){ int c; cin>>c; while(c--) { int n,m; cin>>n>>m; if(n%(m+1)) { cout<<"first"<<endl; }else { cout<<"se... 阅读全文
posted @ 2012-07-31 20:37 77695 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 最恨这种怪里怪气的输入输出了。。尼玛前面非得加个cin>>c。wa爆了也想不出啊。。#include<iostream>using namespace std;const int MAXM=12;typedef long long int llint;llint a[]={23,28,33};int exgcd(int a, int b, int &x, int &y){ if(b == 0){ x = 1, y = 0; return a;} int r = exgcd(b, a % b, x, y); int tmp = x; x = y; y = 阅读全文
posted @ 2012-07-31 20:32 77695 阅读(263) 评论(0) 推荐(0) 编辑