zoukankan      html  css  js  c++  java
  • 博弈---ZOJ 2083 Win the Game(染绳子)

    原题http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2083

    大意:两个人分别对n条绳子染 每次染m长 最后染不下的输,问先手胜负

    思路:每一条绳子看做一个子问题(求每个绳子的SG再异或就是整个事件的SG),每条绳子 染的m的段 左右两端各一段,

    分别求这左右两端的SG再异或 通过SG打表或递归求出整个绳子的各地方的SG

    #include<stdio.h>
    #include<string.h>
    int fib;
    int SG[60];
    
    void getsg(){
    	bool vis[56];
    	memset(SG,0,sizeof(SG));
    	for(int i=2;i<=50;i++){ //i 为当前总长度
    		memset(vis,0,sizeof(vis));
    		for(int j=0;j+2<=i;j++)  //j 为左端长度
    			vis[SG[j]^SG[i-j-2]]=1;
    		for(int k=0;k<=55;k++)
    			if(vis[k]==0)
    			{
    				
    				SG[i]=k;break;
    			}
    	}
    	
    }
    
    int main(){
    	fib=2;
    	getsg();
    	int n,t;int sum=0;
    	while(~scanf("%d",&n)){
    	sum=0;
    		while(n--){
    		scanf("%d",&t);
    		sum^=SG[t];
    	}
    		if(sum==0)printf("No
    ");
    		else printf("Yes
    ");
    	}
    	
    	return 0;
    }

    另外还有一种题型;

    //将上题的线段改为环 做法一样先手先取一段m 问先手胜负
    //思路还是一样 先手先取一段,破环为线段,现在就是换对手考虑线段
    //做法还是一样 这边改为SG(n-m)  然后判断胜负条件改为和原题相反(应该懂吧?)


    版权声明:本文为博主原创文章,未经博主允许不得转载。

    today lazy . tomorrow die .
  • 相关阅读:
    d3的一些总结
    NPashaP的二分图源码部分
    python的web服务器
    d3碰撞源码分析
    测试cnblog文章内部JS
    仿淘宝 vue
    webpack散记---代码分割 和 懒加载
    webpack散记---提取公共代码
    webpack散记--Typescript
    webpack随笔2--编译ES6/ES7
  • 原文地址:https://www.cnblogs.com/france/p/4808764.html
Copyright © 2011-2022 走看看