\(\color{purple}{Link}\)

\(\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;
}

最新文章

  1. JavaScript葵花宝典之闭包
  2. jython安装与配置
  3. 算法:求幂(python版)
  4. android 下载文件
  5. get_magic_quotes_gpc函数
  6. Hbase与hive整合
  7. Invoke BeginInvoke
  8. sqlserver数据库导入Mysql数据库问题
  9. 35.QT-多线程
  10. 多级nginx代理,获取客户端真实ip
  11. c++ 动态判断基类指针指向的子类类型(typeid)
  12. 还原MongoDB dump备份出来的Bson数据
  13. Oracle数据库的语句级读一致性
  14. Python3基础 file read 读取txt文件的前几个字符
  15. 快速切题 poj2488 A Knight&#39;s Journey
  16. 【转】纯JS省市区三级联动(行政区划代码更新至2015-9-30)
  17. Java实现Oracle的to_char函数
  18. 一起学Angular
  19. C# 数组集合分页 Skip Take
  20. 安全测试之bWAPP环境搭建

热门文章

  1. USB Key
  2. 一文吃透redis持久化,妈妈再也不担心我面试过不了!
  3. 大概是win里最方便快捷的截图+拾色软件——Snipaste
  4. JVM内存区域与垃圾回收
  5. 小程序开发-使用xpath解析网页html中的数据
  6. Activiti7 表介绍
  7. Cocos Creator 性能优化:DrawCall
  8. idea报错cannot resolve symbol servlet
  9. kali linux 开启ssh服务
  10. 关于Vuex的那些事儿