首先可以发现,当所有巧克力豆在最后一个瓶子中时,就无法再操作了,此时为必败状态。

注意到,对于每个瓶子里的巧克力豆,是可以在模\(2\)的意义下去考虑的,因为后手可以模仿先手的操作,所以就将巧克力豆个数转化为了\(0\)或\(1\)。

再考虑分裂的过程,位置为\(i\)的巧克力豆,要分裂到位置\(i\)往后的两个位置,最终会到达\(n\)这个位置,可以把向后转移看作\(Nim\)游戏中取石子的操作。

那么分裂就可以看成\(Nim\)游戏中的一堆石子分成了两堆更小的石子,那么通过这个性质,我们就可以\(O(n^3)\)求出\(SG\)值了。

求方案数和字典序最小方案就直接暴力枚举即可,当进行第一步操作后,留给后手的为必败状态,那么该操作合法。

具体实现就看代码吧。

\(code:\)

#include<bits/stdc++.h>
#define maxn 100
using namespace std;
template<typename T> inline void read(T &x)
{
x=0;char c=getchar();bool flag=false;
while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
if(flag)x=-x;
}
int T,n,ans,tot,flag;
int p[maxn],sg[maxn];
bool vis[maxn];
void SG()
{
for(int i=n-1;i;--i)
{
memset(vis,false,sizeof(vis));
for(int j=i+1;j<=n;++j)
for(int k=j;k<=n;++k)
vis[sg[j]^sg[k]]=true;
int t=0;
while(1)
{
if(!vis[t])
{
sg[i]=t;
break;
}
t++;
}
}
}
int main()
{
read(T);
while(T--)
{
read(n),sg[n]=ans=tot=flag=0;
for(int i=1;i<=n;++i) read(p[i]);
SG();
for(int i=1;i<=n;++i)
if(p[i]%2)
ans^=sg[i];
for(int i=1;i<=n;++i)
{
if(!p[i]) continue;
for(int j=i+1;j<=n;++j)
{
for(int k=j;k<=n;++k)
{
if((ans^sg[i]^sg[j]^sg[k])==0)
{
tot++;
if(!flag)
{
flag=true;
printf("%d %d %d\n",i-1,j-1,k-1);
}
}
}
}
}
if(!flag) puts("-1 -1 -1");
printf("%d\n",tot);
}
return 0;
}

最新文章

  1. javascript运动系列第七篇——鼠标跟随运动
  2. 面试题目——《CC150》排序与查找
  3. Linux之head、tail、grep、cut等命令详解
  4. C# 代码页获取input的值
  5. 使用git管理代码的心得
  6. nRF51822之WDT浅析
  7. YUV格式详解
  8. (一)Eclipse 快捷键
  9. io系统
  10. crm使用soap创建下拉框
  11. php7 不向后的兼容的变更
  12. 删除Lb重复的数,用La输出(顺序表)
  13. Velocity(2)——常用语法
  14. jmeter5.1测试dubbo接口
  15. Troubleshooting tips for using Java on Windows 8
  16. 洛谷P1386座位安排
  17. 自学Linux Shell5.2-shell内建命令history alias
  18. 【ARM】2440裸机系列-RTC数字时钟
  19. Windows phone 自定义用户控件(UserControl)——ColorPicker
  20. 【游记】noip2017酱油记

热门文章

  1. java面试基础必备
  2. RabbitMQ:三、进阶
  3. centos搭建nginx+fastdfs
  4. 【C++和C#的区别杂谈】后自增运算符的结算时机
  5. org.hibernate.LazyInitializationException异常解决办法
  6. Halcon斑点分析涉及算子及其高阶运用
  7. 关于display的box和flex布局
  8. 【Linux】CentOS7 常用命令集合
  9. Spring-Validation(数据校验) 你值得拥有
  10. 十年老苹果(A1286)强升Catalina及Win10踩坑记