【题解】一本通例题 S-Nim
\(\text{Solution:}\)
这个题就是给\(Nim\)游戏做了一个限制。
考虑一下\(\text{SG}\)函数:给定的局面下对应的\(SG\)函数值,若\(=0\)则必败。
又有:许多子游戏组成的一个游戏的\(SG=\text{xor}_{i=1}^n SG_i.\)
那么对于这个题,第一次的想法是对于每一个子游戏求一下是不是必胜。这显然是一个对\(SG\)函数了解不足的问题。
那么考虑一下如何求\(SG\)函数:
\(SG(0)=0\)显然。那么对于后面的数,由于\(s,k\)都很小,我们可以暴力枚举求\(SG.\)
求出\(SG\)之后,剩下的就是处理询问:\(m\)个局面,把每个局面的\(a_i\)异或起来,\(0\)为必败,输出答案即可。
#include<bits/stdc++.h>
using namespace std;
int k,s[500],m,n;
int f[10002];
int main(){
	while(1){
		scanf("%d",&k);
		if(!k)return 0;
		int mx=-1,mi=(1<<30);
		string Ans="";
		for(int i=1;i<=k;++i)scanf("%d",&s[i]),mx=max(mx,s[i]),mi=min(mi,s[i]);
		sort(s+1,s+k+1);
		for(int i=0;i<=10000;++i){
			bitset<100001>vis;
			for(int j=1;j<=k;++j){
				if(i<s[j])break;
				vis[f[i-s[j]]]=1;
			}
			for(int j=0;j<=mx+1;++j)if(vis[j]!=1){f[i]=j;break;}
		}
		scanf("%d",&m);
		for(int i=1;i<=m;++i){
			scanf("%d",&n);
			int x,sg=0;
			for(int j=1;j<=n;++j){
				scanf("%d",&x);
				sg^=f[x];
			}
			if(!sg)cout<<'L';
			else cout<<"W";
		}
		cout<<endl;
	}
	return 0;
}
												
											【题解】一本通例题 S-Nim的更多相关文章
- 一本通例题埃及分数—题解&&深搜的剪枝技巧总结
		
一.简述: 众所周知,深搜(深度优先搜索)的时间复杂度在不加任何优化的情况下是非常慢的,一般都是指数级别的时间复杂度,在题目严格的时间限制下难以通过.所以大多数搜索算法都需要优化.形象地看,搜索的优化 ...
 - 一本通例题-生日蛋糕——题解<超强深搜剪枝,从无限到有限>
		
题目传送 显然是道深搜题.由于蛋糕上表面在最底层的半径确认后就确认了,所以搜索时的面积着重看侧面积. 找维度/搜索面临状态/对象:当前体积v,当前外表面面积s,各层的半径r[],各层的高度h[]. 可 ...
 - HDU 5795 A Simple Nim (博弈 打表找规律)
		
A Simple Nim 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 Description Two players take turns ...
 - BZOJ 1874 取石子游戏 (NIM游戏)
		
题解:简单的NIM游戏,直接计算SG函数,至于找先手策略则按字典序异或掉,去除石子后再异或判断,若可行则直接输出. #include <cstdio> const int N=1005; ...
 - HDU 5465 Clarke and puzzle Nim游戏+二维树状数组
		
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle Accepts: 42 Submissions: 26 ...
 - [CQOI2013]新Nim游戏  线性基
		
题面 题面 题解 首先我们知道nim游戏先手必败当且仅当所有石堆异或和为0,因此我们的目标就是要使对手拿石堆的时候,无论如何都不能使剩下的石堆异或和为0. 对于一个局面,如果我们可以选取一些可以凑出0 ...
 - hdu2509Be the Winner(反nim博弈)
		
Be the Winner Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
 - 【bzoj4589】Hard Nim   FWT
		
题目描述 Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1. Claris和NanoApe两个人轮流拿石子,Claris先拿. 2. 每次只能从一堆中取若干个,可将一堆全取走, ...
 - 五一培训 DAY1
		
DAY1 枚举 例题1 题解: 例题2 题解: 例题3 题解: vis[ ]判断是否为素数,pri[ ]储存素数 例题4 题解: 例题5 题解: PS: i < 1<<n ...
 
随机推荐
- 是时候扔掉 Postman 了,Apifox 不香吗!
			
偶然间发现这款测试工具Apifox,暂时还没有想好该把它叫接口测试工具还是辅助开发工具.但是,给我感觉,就是很好用,而且后面还有很多开发的功能是我很期待的. 根据官方给出的简单描述,它能做的事就是: ...
 - Unity中接收服务器消息并广播事件的实现
			
最近接触的项目,是一个棋牌游戏,棋牌游戏需要在前端进行一些操作,然后向服务器发送数据包,在服务器接收到客户端的数据后,会在服务端进行一系列的判断之后,然后发送给客户端一个返回数据,客户端接收到这个返回 ...
 - Mybatis实例及配置(一)
			
创建实体类: package com.test.mybatis.bean; public class Employee { private Integer id; private String las ...
 - pie 饼图
			
1最简单的饼图 // 定制饼图box4饼形图-年龄分布 (function () { const box4 = document.getElementById('box4') const mychar ...
 - input.nextLine()和input.next()的区别
			
输入:dfjjvh eigdj iugydchdgh 使用input.next()读取到的是:dfjjvh 使用input.nextLine()会读取全部
 - 图解选择排序及算法优化(Java实现)
			
选择排序 前言 原理:每次循环对比找出最小/大值,将最值的元素交换至左侧 思想:直接选择排序(Straight Select Sort)算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并 ...
 - 【NOIP2015模拟】终章-剑之魂
			
背景介绍 古堡,暗鸦,斜阳,和深渊-- 等了三年,我独自一人,终于来到了这里-- "终焉的试炼吗?就在这里吗?"我自言自语道. "终焉的试炼啊!就在这里啊!"我 ...
 - oracle之序列
			
序列 15.1 序列是生成唯一整数值的结构,它的典型用途是用于主键值. 结合真题演示伪列nextval, currval用法 CREATE SEQUENCE dept_deptnoINCREMENT ...
 - 【深入理解Linux内核架构】3.3 页表
			
页表:用于建立用户进程空间的虚拟地址空间和系统物理内存(内存.页帧)之间的关联. 向每个进程提供一致的虚拟地址空间. 将虚拟内存页映射到物理内存,因而支持共享内存的实现. 可以在不增加物理内存的情况下 ...
 - JDK15真的来了,一起来看看它的新特性
			
目录 简介 JDK15的新特性 JEP 385 Deprecate RMI Activation for Removal JEP 371 Hidden Classes JEP 339 Edwards- ...