【BZOJ 4600】【SDOI 2016】硬币游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=4600
转化成nim游戏
因为对于每一个反面朝上的硬币编号可以拆成\(2^a3^bc\),选择这个硬币可以翻的其他硬币的编号必须是c的倍数。
那么如果两个单一游戏的c不同的话,只要a和b相同,那么状态的sg值也相同,所以存sg函数的状态时不用考虑c,只用考虑a和b即可。
暴力枚举子状态进行转移。
小神说这是博弈里比较水的一道题QwQ

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int in() {
int k = 0; char c = getchar();
for(; c < '0' || c > '9'; c = getchar());
for(; c >= '0' && c <= '9'; c = getchar())
k = k * 10 + c - 48;
return k;
}
vector <int> a;
int sg[23][23][23], n, maxq;
void init(int SG[23][23]) {
int p, q, t = 0, tmp, num;
for(int i = 0; i <= 20; ++i)
for(int j = 0; j <= 20; ++j) {
a.clear();
for(p = 1; p <= i; ++p, t = 0)
for(q = 1; q <= maxq && p * q <= i; ++q) {
t ^= SG[i - p * q][j];
a.push_back(t);
}
for(p = 1; p <= j; ++p, t = 0)
for(q = 1; q <= maxq && p * q <= j; ++q) {
t ^= SG[i][j - p * q];
a.push_back(t);
}
stable_sort(a.begin(), a.end());
if (!a.size() || a[0] != 0) continue;
tmp = num = 1;
while (tmp < a.size() && a[tmp] == a[tmp - 1]) ++tmp;
while (tmp < a.size()) {
if (a[tmp] != num) {
SG[i][j] = num;
break;
}
++tmp;
while (tmp < a.size() && a[tmp] == a[tmp - 1])
++tmp;
++num;
}
if (tmp == a.size()) SG[i][j] = num;
}
}
int T, m, pw2, pw3, ans;
int main() {
for(maxq = 1; maxq <= 20; ++maxq)
init(sg[maxq]);
T = in();
while (T--) {
n = in(); maxq = in(); ans = 0;
for(int i = 1; i <= n; ++i) {
if (in()) continue;
pw2 = pw3 = 0;
m = i;
while (m % 2 == 0) ++pw2, m /= 2;
while (m % 3 == 0) ++pw3, m /= 3;
ans ^= sg[maxq][pw2][pw3];
}
puts(ans ? "win" : "lose");
}
return 0;
}
【BZOJ 4600】【SDOI 2016】硬币游戏的更多相关文章
- bzoj 2017 [Usaco2009 Nov]硬币游戏 动态规划
[Usaco2009 Nov]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 431 Solved: 240[Submit][Status] ...
- 【题解】Luogu p2964 BZOJ 2017[Usaco2009 Nov]硬币游戏
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...
- [bzoj 2017] [Usaco2009 Nov]硬币游戏
一个多月没更博客了..(期间明白了自己有多傻逼. 这种问题大概就倒着做... f[i][j]:表示考虑剩下的硬币i..n,且之前的人取了j个时,先手最多拿到的钱数.aft[i]:表示硬币i..n的总钱 ...
- bzoj 2017: [Usaco2009 Nov]硬币游戏【dp】
废了废了,一个小dp都想不出来 把c数组倒序一下,变成1在最下,设f[i][j]为某一人取完j个之后还剩1~i的硬币,转移的话应该是f[i][j]=max(s[i]-f[i-k][k]),就是1~n的 ...
- [BZOJ 4516] [SDOI 2016] 生成魔咒
Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...
- 解题:SDOI 2017 硬币游戏
题面 板板的生成函数做法太神仙了,我跑了 朴素的做法是建立AC自动机变成图上的随机游走问题 来仔细考虑一下转移,把状态分成非结尾状态和结尾状态.在一个非结尾状态后补一个串是一定能到达目标串的,但是如果 ...
- [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)
[BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...
- BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...
- BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 897 Solved: 394[Submit][Status ...
随机推荐
- java utf-8文件处理bom头
UTF? UTF,是UnicodeTransformationFormat的缩写,意为Unicode转换格式. 即怎样将Unicode定义的数字转换成程序数据.utf是对Unicode的一种编码格式化 ...
- csu 1812: 三角形和矩形 凸包
传送门:csu 1812: 三角形和矩形 思路:首先,求出三角形的在矩形区域的顶点,矩形在三角形区域的顶点.然后求出所有的交点.这些点构成一个凸包,求凸包面积就OK了. /************** ...
- HDU 4630 No Pain No Game 树状数组+离线操作
题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值. 解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数. ...
- Codeforces Round #283 Div.2 D Tennis Game --二分
题意: 两个人比赛,给出比赛序列,如果为1,说明这场1赢,为2则2赢,假如谁先赢 t 盘谁就胜这一轮,谁先赢 s 轮则赢得整个比赛.求有多少种 t 和 s 的分配方案并输出t,s. 解法: 因为要知道 ...
- accp7.0优化MySchool数据库设计内测笔试题总结
1) 在SQL Server 中,为数据库表建立索引能够(C ). 索引:是SQL SERVER编排数据的内部方法,是检索表中数据的直接通道 建立索引的作用:大大提高了数据库的检索速度,改善数据库性能 ...
- ConcurrentHashMap是如何提高并发时的吞吐性能
为并发吞吐性能所做的优化 ConcurrentHashMap使用了一些技巧来获取高的并发性能,同时避免了锁.这些技巧包括: 为不同的Hash bucket(所谓hash bucket即不同范围的key ...
- Windows7 64位压缩包安装MySQL5.7.9
官网下载64bit MySQL5.7.9压缩包, 解压至安装位置 1. 创建my.ini文件, 内容如下 [mysqld] # Remove leading # and set to the amou ...
- npm换源
作者一介布衣:http://yijiebuyi.com/blog/b12eac891cdc5f0dff127ae18dc386d4.html npm 是node.js 环境下的包管理器,非常强大智能. ...
- sqlserver 通用分页存储过程
来源:http://www.jb51.net/article/19936.htm CREATE PROCEDURE commonPagination ), --要显示的列名,用逗号隔开 ), --要查 ...
- 搜索引擎关键词劫持之php篇(源码与分析)
摘要:其实原理很简单: 搜索引擎关键词劫持的过程实际上就是,修改肉鸡站点(webshell站点)A的首页(希望被搜索引擎收录的页面,一般情况下是首页),使之做出如下判断: if(来访者是蜘蛛){ 输出 ...