上一页 1 ··· 49 50 51 52 53
摘要: 没什么好说的,博弈简单题,懂得SG改下s数组大体都一样详细讲解类试题1850#include #include #include using namespace std; int n,m,p,sg[1003],h[1003],s[20]; void Sg() { int i,j; for(i=0;i=0)h[sg[i-s[j]]]=1; for(j=0;j<1003;j++) if(h[j]==0) { sg[i]=j; break; } } } int main() { s[0]=1;s[1]=2; for(int ... 阅读全文
posted @ 2012-04-04 16:21 剑不飞 阅读(165) 评论(0) 推荐(0) 编辑
摘要: #include #include #include using namespace std; int n,m,sg[1003],h[1003],s[14]; void Sg() { int i,j; for(i=0;i=0)h[sg[i-s[j]]]=1; for(j=0;j<1003;j++) if(h[j]==0) { sg[i]=j; break; } } } int main() { for(int i=0;i<14;i++) s[i]=1<<i; while(scanf("%d",&n)!=EOF) ... 阅读全文
posted @ 2012-04-04 15:54 剑不飞 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 简单博弈,懂得SG函数就能A#include #include #include using namespace std; int main() { int n,m,sg[1003],h[1003]; scanf("%d",&m); while(m--) { int i,j,k; scanf("%d%d",&n,&k); for(i=0;i=0)h[sg[i-j]]=1; } for(j=0;j<1002;j++) { if(h[j]==0) {sg[i]=j;break;} ... 阅读全文
posted @ 2012-04-04 15:15 剑不飞 阅读(115) 评论(0) 推荐(0) 编辑
摘要: SG函数的应用加上^.#include #include #include #define N 10003 using namespace std; int sg[N]; int s[103],h[103]; int main() { int n,m,i,j; //freopen("1.txt","w",stdout); while(scanf("%d",&n)&&n) { for(i=0;i=0) h[sg[j-s[i]]]=1; } for(i=0;i=s[i]&&!sg[j-s[i]]){ 阅读全文
posted @ 2012-04-04 14:53 剑不飞 阅读(131) 评论(0) 推荐(0) 编辑
摘要: pnpnpnpnpnnnnnnnnnpnpnpnpnpnnnnnnnnnpnpnpnpnpnnnnnnnnnpnpnpnpnpnnnnnnnnnpnpnpnpnp步骤1:将所有终结位置标记为必败点(P点);步骤2: 将所有一步操作能进入必败点(P点)的位置标记为必胜点(N点)步骤3:如果从某个点开始的所有一步操作都只能进入必胜点(N点) ,则将该点标记为必败点(P点) ;步骤4: 如果在步骤3未能找到新的必败(P点),则算法终止;否则,返回到步骤2。由表知当n,m均为奇数是为p-必败点#include int main() { int m,n; while(scanf("%d%d&q 阅读全文
posted @ 2012-04-04 10:15 剑不飞 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 经典的博弈题啊,必须弄懂必败点条件。这里是对n堆的牌数去异或,如果值为0则表示必败。题目问我们第一布有哪几种方法胜利。即就是第一步能够给对手构建多少个必败点。由于一次只能对一堆排进行操作,假设我 操作第i堆牌(a张),抽出x张。那么其余n-1堆牌的异或值是固定为b.那么 (a - x)^ b == 0 时,对手必败。到此可能有人像我一样觉得必须历遍所有a求出那个值x满足条件。其实不必要由上式可知x只有唯一取值而且 一个数 与 b 异或等于 0 即表明 这个数等于b.所以反过来我们可以求出b, 令 a - x = b ;只要b满足 b int main() { int sum,a,b[10... 阅读全文
posted @ 2012-04-04 09:52 剑不飞 阅读(162) 评论(0) 推荐(0) 编辑
上一页 1 ··· 49 50 51 52 53