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】硬币游戏的更多相关文章

  1. bzoj 2017 [Usaco2009 Nov]硬币游戏 动态规划

    [Usaco2009 Nov]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 431  Solved: 240[Submit][Status] ...

  2. 【题解】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 ...

  3. [bzoj 2017] [Usaco2009 Nov]硬币游戏

    一个多月没更博客了..(期间明白了自己有多傻逼. 这种问题大概就倒着做... f[i][j]:表示考虑剩下的硬币i..n,且之前的人取了j个时,先手最多拿到的钱数.aft[i]:表示硬币i..n的总钱 ...

  4. 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的 ...

  5. [BZOJ 4516] [SDOI 2016] 生成魔咒

    Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...

  6. 解题:SDOI 2017 硬币游戏

    题面 板板的生成函数做法太神仙了,我跑了 朴素的做法是建立AC自动机变成图上的随机游走问题 来仔细考虑一下转移,把状态分成非结尾状态和结尾状态.在一个非结尾状态后补一个串是一定能到达目标串的,但是如果 ...

  7. [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)

    [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...

  8. BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)

    1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...

  9. BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】

    1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 897  Solved: 394[Submit][Status ...

随机推荐

  1. 线程同步以及yield()、wait()、Notify()、Notifyall()

    一.线程同步 1.线程同步的目的是为了保护多个线程访问一个资源时对资源的破坏. 2.线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对 ...

  2. ADO.Net属性扩展

    属性扩展 大体意思:有外键关系时将代号化信息处理成原始文字 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展一个显示nation名称的属性 using ...

  3. javascript高级程序设计 读书笔记1

    第二章  在HTML中使用JS 加载JS有三种:行内,head头部和外部链接JS   最好使用外部链接<script src="example.js" ></sc ...

  4. [USACO1.1]坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  5. Emacs杂谈(一)Emacs环境 c++ 快捷键

    最近头脑发热(抽),重装了电脑,改成linux的ubuntu系统,熟悉一下环境,顺便转载相关emacs知识. //插播一则通知:似乎linux上vector不能用,会内存炸错,若有人可以解答,请用评论 ...

  6. Win7安装visual c++ 2015 redistributable x64失败

    from:http://www.fxyoke.cn/forum.php?mod=viewthread&tid=1171 在win7中安装visual c++ 2015 redistributa ...

  7. mysql线上一个定时备份脚本

    数据库服务使用的是阿里云的mysql,远程进行定时的全量备份,备份到本地,以防万一.mysql数据库远程备份的数据最好打包压缩: [root@huanqiuPC crontab]# pwd/Data/ ...

  8. Python的高级特性6:使用__slots__真的能省很多内存

    在伯乐在线上看到了这篇文章,用Python的 __slots__ 节省9G内存,于是想测试下,对单个类,用__slots__节省内存效果会不会明显. 看完这个例子后,我们也会明白__slots__是用 ...

  9. 【MVC版本】MVC3、MVC4之MODEL验证大比拼

    1.密码验证 MVC3 [System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = &quo ...

  10. Solving GitHub FetchHead (MergeConflict) in Visual Studio 2013

    I was getting the error: An error occurred. Detailed message: An error was raised by libgit2. Catego ...