【BZOJ】3576: [Hnoi2014]江南乐
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3576
很显然,这是一个multi-nim游戏。
注意:1.一个点的SG值就是一个不等于它的后继点的SG的且大于等于零的最小整数。(mex)
2.主游戏的SG值等于所有子游戏的异或和
所以区分好主游戏和后继点的区别。
一开始多个石子堆组合起来形成了一个主游戏。
一个石子堆可以分为多个石子堆,每一种分发构成了一个主游戏,这些主游戏的异或和构成的当前这个点(状态)的SG函数。
显然有一个${m^{2}}$做法,即记忆化搜索SG函数。
考虑${x/i}$只有$\sqrt{n}$种取值,再考虑一下它们的奇偶性,然后分块来做。
70Code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 100100
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,bj[maxn],sg[maxn],T,F,a[maxn]; llg dp(llg x)
{
if (bj[x]) return sg[x];
bj[x]=;
sg[x]=;
bool e[maxn];
memset(e,,sizeof(e));
for (llg m=;m<=x;m++)
{
llg v1=m-x%m,v2=x%m;
llg nsg=;
if (v1&) nsg^=dp(x/m);
if (v2&) nsg^=dp(x/m+);
e[nsg]=;
}
for (llg i=;;i++) if (!e[i]) {sg[x]=i; return sg[x];}
} int main()
{
yyj("game");
cin>>T>>F;
for (llg i=;i<F;i++) bj[i]=;
while (T--)
{
scanf("%lld",&n);
llg ans=;
for (llg i=;i<=n;i++)
{
scanf("%lld",&a[i]);
ans^=dp(a[i]);
}
if (ans) printf("");else printf("");
if (T) printf(" ");
}
return ;
}
100Code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 100100
#define llg int
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,bj[maxn],sg[maxn],T,F,a[maxn]; llg dp(llg x)
{
if (bj[x]) return sg[x];
bj[x]=;
sg[x]=;
bool e[maxn];
memset(e,,sizeof(e));
for (llg m=,j=;m<=x;m=j+)
{
j=x/(x/m);
llg v1=m-x%m,v2=x%m,cnt=j-m+;
llg nsg=;
if (v1&) nsg^=dp(x/m);
if (v2&) nsg^=dp(x/m+);
e[nsg]=;
if (cnt>=)
{
nsg=;
if (((m+)-x%(m+))&) nsg^=dp(x/(m+));
if ((x%(m+))&) nsg^=dp(x/(m+)+);
e[nsg]=;
}
}
for (llg i=;;i++) if (!e[i]) {sg[x]=i; return sg[x];}
} int main()
{
yyj("game");
cin>>T>>F;
for (llg i=;i<F;i++) bj[i]=;
while (T--)
{
scanf("%d",&n);
llg ans=;
for (llg i=;i<=n;i++)
{
scanf("%d",&a[i]);
ans^=dp(a[i]);
}
if (ans) printf("");else printf("");
if (T) printf(" ");
}
return ;
}
【BZOJ】3576: [Hnoi2014]江南乐的更多相关文章
- bzoj 3576[Hnoi2014]江南乐 sg函数+分块预处理
3576: [Hnoi2014]江南乐 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1929 Solved: 686[Submit][Status ...
- bzoj 3576: [Hnoi2014]江南乐
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F ...
- bzoj 3576: [Hnoi2014]江南乐【博弈论】
这个东西卡常--预处理的时候要先把i%j,i/j都用变量表示,还要把%2变成&1-- 首先每一堆都是不相关子游戏,所以对于每一堆求sg即可 考虑暴力枚举石子数i,分割块数j,分解成子问题求xo ...
- BZOJ 3576: [Hnoi2014]江南乐 (SG函数)
题意 有nnn堆石子,给定FFF,每次操作可以把一堆石子数不小于FFF的石子平均分配成若干堆(堆数>1>1>1). 平均分配即指分出来的石子数中最大值减最小值不超过111.不能进行操 ...
- 洛谷 P3235 [HNOI2014]江南乐 解题报告
P3235 [HNOI2014]江南乐 Description 两人进行 T 轮游戏,给定参数 F ,每轮给出 N 堆石子,先手和后手轮流选择石子数大于等于 F 的一堆,将其分成任意(大于1)堆,使得 ...
- 【bzoj3576】 Hnoi2014—江南乐
http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接) 题意 给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分 ...
- 【bzoj3576】[Hnoi2014]江南乐 博弈论+SG定理+数学
题目描述 两人进行 $T$ 轮游戏,给定参数 $F$ ,每轮给出 $N$ 堆石子,先手和后手轮流选择石子数大于等于 $F$ 的一堆,将其分成任意(大于1)堆,使得这些堆中石子数最多的和最少的相差不超过 ...
- bzoj3576: [Hnoi2014]江南乐
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一 ...
- [HNOI2014]江南乐
Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一 ...
随机推荐
- AtCoder Beginner Contest 088 (ABC)
A - Infinite Coins 题目链接:https://abc088.contest.atcoder.jp/tasks/abc088_a Time limit : 2sec / Memory ...
- Nginx配置服务器静态文件支持跨域访问
在server中配置 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Reque ...
- 清明 DAY 1
数学基础 Part 1. 高精度计算 Part 2. 模意义下的运算 mod 对一个数取模,其实就是取余数 注意: • 无除法运算 • ...
- flask框架----基于flask的扩展实现的简单的页面登录
废话不多说,直接上代码 from flask import Flask,render_template,request,redirect,session app = Flask(__name__,te ...
- 怎样从外网访问内网Zeus?
本地安装了一个Zeus,只能在局域网内访问,怎样从外网也能访问到本地的Zeus呢?本文将介绍具体的实现步骤. 准备工作 安装并启动Zeus 默认安装的Zeus端口是9090. 实现步骤 下载并解压ho ...
- e3.7.2-MyEclipse-10.7安装SVN插件
MyEclipse 10.7的版本是:e3.7.2,要求是匹配该插件eclipse_svn_site-1.10.1的版本,否则无效 将eclipse_svn_site-1.10.1插件文件夹直接拷贝到 ...
- c++ STL中的set和multiset
1.结构 set和multiset会根据特定的排序原则将元素排序.两者不同之处在于,multisets允许元素重复,而set不允许重复. set中的元素可以是任意类型的,但是由于需要排序,所以元素必须 ...
- fjwc2019 D3T2 送分题
#185. 「2019冬令营提高组」送分题 这是原题..... P3615 如厕计划 手推一推你发现,显然男性不能多于女性. 然后你或许可以发现一个神奇的性质. 对于每个序列,我们记$M$为$1$,$ ...
- Pycharm创建Django项目并访问Django
Pycharm创建Django项目并访问Django 一.Django插件 如果没有Django插件,需要先安装Django插件. 1,首先点击Default Settings,打开设置页面: 2,打 ...
- 《web前端设计基础——HTML5、CSS3、JavaScript》 张树明版 简答题简单整理
web前端设计基础——HTML5.CSS3.JavaScript 简答题整理 第一章 (1)解释一下名词的含义:IP地址.URL.域名 iP定义了如何连入因特网,以及数据如何在主机间传输的标准. ...