【题解】一本通例题 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 ...
随机推荐
- windows设置定时执行脚本
如果你写了一些Python程序,想要在特定的时间进行执行,例如你想让一段爬虫程序在每天的上午10点执行一次,那么我们就可以来使用windows自带的定时任务进行设置.由于Windows系统,无法使用L ...
- Android项目智能机器人的实现,带有源代码,图灵智能机器人,详细讲解。。
大家好,今天给大家推荐一个我利用图灵api制作的android项目,智能机器人,类似智能小冰,等一些会机器人. 下面看效果.女头像是系统自动给你回复的,男头像是你输入的内容.项目源代码是eclipse ...
- Linux 操作系统 基础
root: 管理员 /: 根目录[windows : 计算机] ~: 家目录: 管理员:/root/.. 非管理员:/home/... 命令提示符: [root@localhost abc]#: ro ...
- [BUUOJ记录] [BJDCTF 2nd]old-hack & Schrödinger & elementmaster
三道比较简单的的题放一起一写,old-hack是ThinkPHP框架的一个nday,Schrödinger和elementmaster没啥考点,就是脑洞 一.old-hack 进入题目没发现什么Hi ...
- luogu P3796 【模板】AC自动机(加强版)
知识点:1.一定要删掉调试信息 2.数组别重名 code: #include <bits/stdc++.h> using namespace std; int n; int len[]; ...
- 动态路由 - OSPF 一文详解
动态路由 在之前的文章中,介绍了基于距离矢量的路由协议.而在今天这这一部分中会主要讲解链路状态的路由协议,对于动态的路由协议来说,需要具备如下的能力: 发现远端网络 路由器可以直接获得直连路由,这是由 ...
- Face The Right Way(POJ 3276)
原题如下: Face The Right Way Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6708 Accepte ...
- [Leetcode]585. 2016年的投资(MySQL)
题目 写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数. 对于一个投保人,他在 2016 年成功投资的条件是: 他在 2015 年的投保额 (TIV_ ...
- [LeetCode]72. 编辑距离(DP)
题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1 ...
- WPF相关UI库
免费控件库: 1.Extended WPF Toolkit 官方拓展控件 http://wpftoolkit.codeplex.com/ 2.avalondock 可停靠布局(wpf toolkit包 ...