题目链接:UVALive - 3668

题目大意为给定n堆石子,每次的操作是选择三个数i<j<=k,从i中拿一枚石子,在j和k中分别放入一枚石子。不能操作者输。求先手是否能赢,若可以,则输出字典序最小的第一步操作。

思路是把在每个位置上的每颗石子当成一个游戏。

用SG[i]表示在第i堆中的一颗石子的sg函数。

则SG[i]=mex(SG[j] ^ SG[k])。

然后异或求游戏的和即可。

为找到字典序最小的第一步操作,我们枚举第一步操作,然后求游戏的和即可。

代码如下:

 #include"cstdio"
#include"iostream"
#include"cstring"
#include"algorithm"
#include"cstdlib"
#include"vector"
#include"set"
#include"map"
#include"cmath"
using namespace std;
typedef long long LL;
const LL MAXN=; int n;
int f[MAXN];
int sg(int x)
{
if(x==n) return ;
if(f[x]!=-) return f[x];
int vis[];
memset(vis,,sizeof(vis));
for(int i=x+;i<=n;i++)
for(int j=i;j<=n;j++)
vis[sg(i)^sg(j)]=;
for(int i=;i<;i++)
if(!vis[i])
return f[x]=i;
return ;
}
int d[MAXN];
int cal()
{
memset(f,-,sizeof(f));
int ans=;
for(int i=;i<=n;i++)
if(d[i]%!=)
ans ^= sg(i);
return ans;
}
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif
int t=;
while(scanf("%d",&n)!=EOF && n)
{
for(int i=;i<=n;i++)
scanf("%d",&d[i]);
int i,j,k;
bool ok=false;
for(i=;!ok && i<=n;i++)
for(j=i+;!ok && j<=n;j++)
for(k=j;!ok && k<=n;k++)
if(d[i]>)
{
d[i]--;
d[j]++;
d[k]++;
if(cal()==)
ok=true;
d[i]++;
d[j]--;
d[k]--;
}
printf("Game %d: ",++t);
if(ok) printf("%d %d %d\n",i-,j-,k-);
else printf("-1 -1 -1\n");
}
return ;
}

最新文章

  1. window系统JDK1.7的快速配置
  2. React 入门实例教程(转载)
  3. FIS
  4. mysql线上一个定时备份脚本
  5. MyEclipse 8.5 优化实例
  6. iOS单例模式(Singleton)写法简析
  7. lintcode 中等题:N Queens N皇后问题
  8. Servlet 浅谈(三)
  9. Redis基础学习(二)&mdash;数据类型
  10. BYS推荐MS前端PhoneCall面试问题整理-2
  11. 简述C/C++调用lua中实现的自定义函数
  12. MacOS 安装 Jenkins
  13. vue+typescript基础练习
  14. ansible配置文件详解
  15. 【c#】RabbitMQ学习文档(七)C# API
  16. 5、AngularJS 直接绑定显示html ($sce、$sanitize服务)
  17. 【GYM 102059】2018-2019 XIX Open Cup, Grand Prix of Korea
  18. js 判断移动端是否安装应用
  19. CodeSmith 基础用法和例子
  20. 最好使的歌词编辑工具--Beslyric

热门文章

  1. tarjan强连通分量模板(pascal)
  2. 如何在Word中排出漂亮的代码
  3. var和let使用上的对比
  4. liunx less 命令
  5. 【刷题】BZOJ 4196 [Noi2015]软件包管理器
  6. 64位win10系统无法安装.Net framework3.5的两种解决方法【转】
  7. 【bzoj4872】【shoi2017】分手即是祝愿
  8. Lua弱表Weak table
  9. JSTL与EL与OGNL
  10. git查看/修改 用户名和邮箱