当前位置: 首页 > news >正文

P3185 [HNOI2007] 分裂游戏

P3185 [HNOI2007] 分裂游戏

题目描述

聪聪和睿睿最近迷上了一款叫做分裂的游戏。

该游戏的规则是: 共有 \(n\) 个瓶子, 标号为 \(0, 1, \ldots, n-1\),第 \(i\) 个瓶子中装有 \(p_i\) 颗巧克力豆,两个人轮流取豆子,每一轮每人选择 \(3\) 个瓶子,标号为 \(i,j,k\), 并要保证 \(i \lt j, j \leq k\),且第 \(i\) 个瓶子中至少要有 \(1\) 颗巧克力豆,随后这个人从第 \(i\) 个瓶子中拿走一颗豆子并在 \(j,k\) 中各放入一粒豆子(\(j\) 可能等于 \(k\)) 。如果轮到某人而他无法按规则取豆子,那么他将输掉比赛。胜利者可以拿走所有的巧克力豆!

两人最后决定由聪聪先取豆子,为了能够得到最终的巧克力豆,聪聪自然希望赢得比赛。他思考了一下,发现在有的情况下,先拿的人一定有办法取胜,但是他不知道对于其他情况是否有必胜策略,更不知道第一步该如何取。他决定偷偷请教聪明的你,希望你能告诉他,在给定每个瓶子中的最初豆子数后是否能让自己得到所有巧克力豆,他还希望你告诉他第一步该如何取,并且为了必胜,第一步有多少种取法?

\(1 \leq t \leq 10\)\(2 \leq n \leq 21\)\(0 \leq p_i \leq 10^4\)

思路

首先,需要注意到,每颗巧克力豆互不相关。也就是说,可以将当前盘面分为每颗巧克力豆的子盘面。

对于每颗巧克力豆,其标志只有位置。因此,只需要算出每个位置的巧克力豆的sg值即可。

直接根据定义,枚举后继局面,即当前巧克力豆转移后的位置,暴力计算、预处理出sg值。

然后对于每次询问,暴力枚举所有可能的转移,转移后sg为零就是合法的操作。

复杂度 \(O(tn^3)\)

Code

#include<bits/stdc++.h>
using namespace std;
// #define int long long
const int N=25,inf=1e9;int read(){int ans=0;char c=getchar();bool f=0;for(;!isdigit(c);c=getchar())if(c=='-')f=1;for(;isdigit(c);c=getchar())ans=(ans<<=1)+(ans<<2)+(c^48);return f?-ans:ans;
}void print(int x){if(x<0)x=-x,putchar('-');if(x>9)print(x/10);putchar(x%10|48);
}int n,sg[N],a[N];
bool vis[N];void init(){int n=21;sg[1]=0;for(int i=2;i<=n;++i){for(int j=1;j<i;++j){for(int k=j;k<i;++k){vis[sg[j]^sg[k]]=1;}}while(vis[sg[i]])++sg[i];for(int j=0;j<=n;++j)vis[j]=0;}
}signed main(){init();int T=read();while(T--){int n=read(),s=0;for(int i=1;i<=n;++i){a[i]=read();if(a[i]&1)s^=sg[n-i+1];}int cnt=0,ai,aj,ak;for(int i=1;i<n;++i){if(!a[i])continue;for(int j=i+1;j<=n;++j){for(int k=j;k<=n;++k){if((s^sg[n-i+1]^sg[n-j+1]^sg[n-k+1])==0){++cnt;if(cnt==1)ai=i,aj=j,ak=k;}}}}if(!cnt){puts("-1 -1 -1\n0");}else {printf("%d %d %d\n%d\n",ai-1,aj-1,ak-1,cnt);}}return 0;
}
http://www.jsqmd.com/news/405439/

相关文章:

  • P14393 题解
  • 民生银行的事
  • 导师推荐!自考论文神器 —— 千笔写作工具
  • 2026最新!9个降AIGC平台测评:研究生降AI率必备工具全解析
  • 2026更新版!AI论文工具 千笔AI VS 知文AI,专科生写作新选择!
  • 看完就会:专科生必备的AI论文工具 —— 千笔写作工具
  • 格式总出错?口碑爆棚的AI论文平台 —— 千笔·专业论文写作工具
  • AI元人文:空性、科学与舞台 ——基于“自感注册”的存在论拓展
  • 闭眼入AI论文工具,千笔AI VS 学术猹,本科生专属神器!
  • 从此告别拖延,AI论文软件 千笔ai写作 VS 云笔AI,自考写作者首选!
  • 字面量与变量
  • LSM-Tree 日志结构合并树
  • 2026年适合企业产品介绍可商用的9款解说配音软件
  • aaaaa
  • CF2192C All-in-one Gun
  • 基于php高校社团管理系统设计与实现_w349azoj
  • [php]校园互助生活服务交流平台视频(编号:99513267)
  • 基于PHP的高校学生考勤管理系统的设计与实现_qy08f0tq
  • 可信数据空间建设运营指南,六项地方标准
  • 考虑风光火储的微电网优化调度 软件:Matlab+cplex 介绍:考虑风电、光伏、热电机组和...
  • 干货来了:MBA必备降AI率工具,千笔·降AIGC助手 VS Checkjie
  • 【实战落地】方言TTS开发避坑指南:从0搭建可商用方言语音生成系统(附完整代码+顶会方案)
  • 多组学临床运用--解析胃癌新辅助免疫化疗异质性反应的遗传与免疫驱动因素
  • 处理二维信号(或图像)的傅里叶变换算法的MATLAB源代码,其中含:二维傅里叶变换、用滤波器自...
  • python大学生兼职信息系统(编号:15217141)
  • python日用品在线购物商城平台设计与实现 9c9d42r0
  • python家政服务公司信息管理系统(编号:50892236)
  • 无感方波方案,无感启动无抖动,无反转,启动方式为脉冲注入检测位置,换相方式为AD+比较器,电机...
  • 人工智能应用- 预测化学反应:03. 扑朔迷离的化学反应
  • 开发日志5