Solution -「HNOI 2007」「洛谷 P3185」分裂游戏
\(\mathcal{Description}\)
Link.
给定 \(n\) 堆石子,数量为 \(\{a_n\}\),双人博弈,每轮操作选定 \(i<j\le k\),使 \(a_i \leftarrow a_i-1\),\(a_j \leftarrow a_j+1\),\(a_k \leftarrow a_k+1\),并保证操作后所有 \(a_i\ge0\)。求保证先手胜的第一步操作方案数和字典序最小的第一步操作。
多测,\(n\le21\),\(0\le a_i\le10^4\),数据组数 \(\le10\)。
\(\mathcal{Solution}\)
由于每次只能取走一个石子,所以一个有 \(x\) 个石子的位置实际上可以看做 \(x\) 堆互不相关的石子放在同一个位置。而由于“互不相关”,求出每个位置上有一颗石子的 SG 函数异或起来就是答案。令 \(\operatorname{sg} (i)\) 表示位置 \(i\) 有一颗石子的 SG 值,显然:
\]
扫出 \(\operatorname{sg}\),设所有石子 \(\operatorname{sg}\) 异或和为 \(X\),据此判断是否有解。若有解,暴力枚举第一次操作的 \(i,j,k\),若 \(X\oplus \operatorname{sg} (i)\oplus \operatorname{sg} (j)\oplus \operatorname{sg} (k)=0\),说明操作后先手必败,此次操作计入贡献,最终 \(\mathcal O(Tn^3)\) 就解决啦!
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
#include <cstring>
const int MAXN = 21;
int n, sg[MAXN + 5], a[MAXN + 5];
inline int calcSG ( const int i ) {
if ( ~sg[i] ) return sg[i];
bool vis[105] {};
for ( int j = i + 1; j <= n; ++ j ) {
for ( int k = j; k <= n; ++ k ) {
vis[calcSG ( j ) ^ calcSG ( k )] = true;
}
}
for ( int j = 0; ; ++ j ) if ( !vis[j] ) return sg[i] = j;
}
int main () {
int T;
for ( scanf ( "%d", &T ); T --; ) {
scanf ( "%d", &n ), memset ( sg, 0xff, sizeof sg );
int ans = 0;
for ( int i = 1; i <= n; ++ i ) {
if ( scanf ( "%d", &a[i] ), a[i] & 1 ) {
ans ^= calcSG ( i );
}
}
if ( !ans ) { puts ( "-1 -1 -1\n0" ); continue; }
int ways = 0;
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 ( !( ans ^ calcSG ( i ) ^ calcSG ( j ) ^ calcSG ( k ) ) && !ways ++ ) {
printf ( "%d %d %d\n", i - 1, j - 1, k - 1 );
}
}
}
}
printf ( "%d\n", ways );
}
return 0;
}
Solution -「HNOI 2007」「洛谷 P3185」分裂游戏的更多相关文章
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- 洛谷P1274-魔术数字游戏
Problem 洛谷P1274-魔术数字游戏 Accept: 118 Submit: 243Time Limit: 1000 mSec Memory Limit : 128MB Probl ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- Solution -「JSOI 2019」「洛谷 P5334」节日庆典
\(\mathscr{Description}\) Link. 给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的). \(|S|\le3\time ...
- Solution -「洛谷 P4372」Out of Sorts P
\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...
- Solution -「POI 2010」「洛谷 P3511」MOS-Bridges
\(\mathcal{Description}\) Link.(洛谷上这翻译真的一言难尽呐. 给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...
- Solution -「APIO 2016」「洛谷 P3643」划艇
\(\mathcal{Description}\) Link & 双倍经验. 给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...
- 「洛谷4197」「BZOJ3545」peak【线段树合并】
题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...
随机推荐
- 简单谈谈 TCP/IP
1.前言 IP 或 ICMP.TCP 或 UDP.TELNET 或 FTP.以及 HTTP 等都属于 TCP/IP 协议. 他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分.TCP/I ...
- react组件性能优化PureComponent
首先我们使用react组件会配合connect来连接store获取state,那么只要store中的state发生改变组件就会重新渲染,所以性能不高,一般我们可以使用shouldComponentUp ...
- 图形验证插件,百度编辑器拓展功能,NodeJs消息机制以及聊天室
图形验证插件 网上找了很多图形验证插件,比较推荐verify.js <link rel="stylesheet" type="text/css" href ...
- 网络协议学习笔记(八)DNS协议和HttpDNS协议
概述 上一篇主要讲解了流媒体协议和p2p协议,现在我给大家讲解一下关于DNS和HttpDNS的相关知识. DNS协议:网络世界的地址簿 在网络世界,也是这样的.你肯定记得住网站的名称,但是很难记住网站 ...
- JMM模型基础知识笔记
概述 内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象,不同架构下的物理机拥有不一样的内存模型,Java虚拟机也有自己的内存模型,即Java内存模型(JavaMem ...
- 极简promise雏形
function Promise(fn) { var value = null, callbacks = []; //callbacks为数组,因为可能同时有很多个回调 this.then = fun ...
- SQL查询中关键字的执行顺序
SQL语句中的每个关键字都按照顺序往下执行,而每一步操作会生成一个临时表,最后的临时表就是最终结果: FROM <left_table>:from子句返回初始结果集 <join_ty ...
- 【解决了一个小问题】golang build中因为缓存文件损坏导致的编译错误
编译的过程中出现了一个吓人的错误: GOROOT=C:\Go #gosetup GOPATH=C:\Users\ahfuzhang\go #gosetup C:\Go\bin\go.exe mod t ...
- 在linux下编译android下的opencv,使用cmake的方法
#前一篇帖子实验了build_sdk.py来编译opencv,失败了.#本篇尝试使用cmake来编译#感谢这篇帖子提供的指导:https://www.cnblogs.com/jojodru/p/100 ...
- spark中job stage task关系
1.1 例子,美国 1880 - 2014 年新生婴儿数据统计 目标:用美国 1880 - 2014 年新生婴儿的数据来做做简单的统计 数据源:https://catalog.data.gov 数据格 ...