bzoj4035【HAOI2015】数组游戏
题目描述
输入格式
输出格式
对于每个询问,若先手必胜输出"Yes",否则输出"No"。答案之间用换行隔开
数据范围
N<=1000000000 , K,W<=100 , 不会有格子在同
一次询问中多次出现。
题解
- 可以发现变颜色这类问题是符合分解理论的,求出所有位置的sg值异或得到游戏的sg值;
- 考虑所有位置的sg值如何求;
- 可以写出一个$O(n^2)$的暴力(注意终止状态的$sg$为0);
- 考虑改进暴力,打表发现对于一个$n$的所有$i$,$\frac{n}{i}$相同的位置sg值也相同;
- 将$n$下底分块,就只需要求出$\sqrt{n}$个块的sg函数;
- 由于是异或,只需要判断在某个块里的奇偶性就可以知道经过这个块的异或值;
- 同时sg值由于是$mex$所以没有很大,$i<=sqrt(n)$的直接存,$i>sqrt{n}$的存在$\frac{n}{i}$里面:
- 时间复杂度:$O(n)$ ?, 空间复杂度:$O(\sqrt{n})$;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int n,m,u,a[N],b[N],tot,vis[N],q[N];
void pre(){
for(int i=tot,tmp;i;--i){
tmp=;
int x = q[i];
for(int j=x*,lst;j<=n;j=lst+x){
lst=n/(n/j)/x*x;
int t=lst<=u?a[lst]:b[n/lst];
vis[tmp^t]=i;
if(((lst-j)/x+)&)tmp^=t;
}
for(int j=;;++j)if(vis[j]!=i){tmp=j;break;}
if(x<=u)a[x]=tmp;else b[n/x]=tmp;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("bzoj4035.in","r",stdin);
freopen("bzoj4035.out","w",stdout);
#endif
scanf("%d%d",&n,&m);u=sqrt(n);
for(int i=,lst;i<=n;i=lst+){lst=n/(n/i);q[++tot]=lst;}
pre();
for(int i=,x,tmp;i<=m;++i){
scanf("%d",&x);tmp=;
for(int j=,y;j<=x;++j){
scanf("%d",&y);
y=n/(n/y);
tmp^= y<=u?a[y]:b[n/y];
}
puts(tmp?"Yes":"No");
}
return ;
}
bzoj4035
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,vis[N],sg[N];
int main(){
// freopen("exp.in","r",stdin);
freopen("exp.out","w",stdout);
for(n=;n<=;++n){
for(int i=;i<=n;++i)sg[i]=;
for(int i=n;i;--i){
for(int j=;j<=n/i;++j)vis[j]=;
int tmp = ;
for(int j=i+i;j<=n;j+=i){
tmp ^= sg[j];
vis[tmp]=;
}
for(int j=;j<=n/i;j++)if(!vis[j]){sg[i]=j;break;}
}
//for(int i=1;i<=100-n+1;++i)putchar(' ');
//for(int i=1;i<=n;++i)putchar(' ');
for(int i=;i<=n;++i)printf("%d ",sg[i]);
//printf("%d ",sg[n-2]);
//for(int i=3;i<=n;i+=3)printf("%d ",sg[i]);
puts("");
}
/*
int now = 20, cnt=0;
for(int i=now,j;i;i=j,now>>=1){
j = i - ((now + 1)>>1);
for(int k=i;k>j;--k)printf("%d",sg[k]),cnt++;
puts("");
}
cout<<cnt<<endl;
*/
return ;
}
暴力
bzoj4035【HAOI2015】数组游戏的更多相关文章
- bzoj4035 [HAOI2015]数组游戏
这题显然把每个白格子看成一个子游戏 一个白格子$x$的$sg$值是$mex{[0,sg[2x],sg[2x] XOR sg[3x].....]}$ 打表发现一个数的$sg$值只和$n/x$有关,然后分 ...
- 【BZOJ4035】数组游戏(博弈论)
[BZOJ4035]数组游戏(博弈论) 题面 BZOJ 洛谷 题解 很明显是一个翻硬币游戏的变形,因此当前局面的\(SG\)函数值就是所有白格子单独存在的\(SG\)函数的异或和. 那么,对于每一个位 ...
- 【BZOJ 4035】 4035: [HAOI2015]数组游戏 (博弈)
4035: [HAOI2015]数组游戏 Time Limit: 15 Sec Memory Limit: 32 MBSubmit: 181 Solved: 89 Description 有一个长 ...
- @bzoj - 4035@ [HAOI2015]数组游戏
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一个长度为N的数组,甲乙两人在上面进行这样一个游戏: 首先,数 ...
- [HAOI2015]数组游戏
题目大意: 有一排n个格子,每个格子上都有一个白子或黑子,在上面进行游戏,规则如下: 选择一个含白子的格子x,并选择一个数k,翻转x,2x,...,kx格子上的子. 不能操作者负. 思路: 将“某个格 ...
- 【LOJ】#2126. 「HAOI2015」数组游戏
题解 简单分析一下就知道\(\lfloor \frac{N}{i} \rfloor\)相同的\(i\)的\(sg\)函数相同 所以我们只要算\(\sqrt{n}\)个\(sg\)函数就好 算每一个\( ...
- JZYZOJ1540 BZOJ4035 [ haoi2015 上午] T3 博弈论 sg函数 分块 haoi
http://172.20.6.3/Problem_Show.asp?id=1540 之前莫比乌斯反演也写了一道这种找规律分块计算的题,没觉得这么恶心啊. 具体解释看代码. 翻硬币的具体方法就是分别算 ...
- 最浅谈的SG函数
[更新] Nim游戏的经验: 每次最多取m个——%(m+1) 阶梯nim——奇数位无视,看偶数位互相独立,成一堆一堆的石子 . . . . 既然被征召去汇总算法..那么挑个简单点的SG函数好了.. 介 ...
- sg函数小结
sg函数小结 sg函数是处理博弈问题的重要工具. 我们知道sg(x)=mex{sg(j)|x能到达状态j} sg(x)=0时代表后手赢,否则先手赢. 对于一个问题,如果某些子问题是相互独立的,我们就可 ...
随机推荐
- PCL 库存在vtk的问题导致libproj.so链接错误
常变现为** No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so', needed by ××× vtk库的bug导致,目前尚未修 ...
- 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识
深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...
- XSS(Cross Site Script)
类型一:反射型XSS 简单地把用户输入的数据“反射”给浏览器.也就是说,黑客需要诱使用户“点击”一个恶意链接,才能攻击成功. 类型二:存储型XSS 把用户输入的数据“存储”在服务器端.这种XSS具有很 ...
- nohup命令详解
基础命令学习目录首页 原文链接:https://blog.csdn.net/hfismyangel/article/details/80258126 1.nohup 用途:不挂断地运行命令. 语法:n ...
- hive的udf创建永久函数
上传jar包到hdfs目录中, hdfs dfs -put /home/user/hive-functions.jar /user/hive/jars/hive-functions.jar cre ...
- OO前三次作业简单总结
随着几周的进行,OO课堂已经经历过三次课下作业.在这三次作业中,我被扣了一些分数,也发现了自己几次作业中一些存在的共同的问题. 首先以第三次作业为例分析,我程序的类图如下 一共九个类,其中Als_sc ...
- SpringMVC 常用注释
@Controller Controller控制器是通过服务接口定义的提供访问应用程序的一种行为 @Repository Dao层的标志 @RequestMapping 标注控制层函数的访问路径 ...
- class 3 求数组中的最大值(单元测试)
1.问题引出: int Largest(int list[], int length) { int i,max; ; i < (length – ); i ++ ) { if(list[i] & ...
- HDU 1015 Jury Compromise 01背包
题目链接: http://poj.org/problem?id=1015 Jury Compromise Time Limit: 1000MSMemory Limit: 65536K 问题描述 In ...
- SDWebImage缓存图片的机制
SDWebImage是一个很厉害的图片缓存的框架.既ASIHttp+AsyncImage之后,我一直使用AFNetworking集成的UIImageView+AFNetworking.h,但后者对于图 ...