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时代表后手赢,否则先手赢. 对于一个问题,如果某些子问题是相互独立的,我们就可 ...
随机推荐
- https、ssl、tls协议学习
一.知识准备 1.ssl协议:通过认证.数字签名确保完整性:使用加密确保私密性:确保客户端和服务器之间的通讯安全 2.tls协议:在SSL的基础上新增了诸多的功能,它们之间协议工作方式一样 3.htt ...
- 小刘的深度学习---Faster RCNN
前言: 对于目标检测Faster RCNN有着广泛的应用,其性能更是远超传统的方法. 正文: R-CNN(第一个成功在目标检测上应用的深度学习的算法) 从名字上可以看出R-CNN是 Faster RC ...
- python基础网络编程--转
python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...
- python os.walk详解
os模块大全详情 os.walkos.walk方法,主要用来遍历一个目录内各个子目录和子文件. os.walk(top, topdown=True, onerror=None, followlinks ...
- 3.控制hive map reduce个数
参考: https://blog.csdn.net/wuliusir/article/details/45010129 https://blog.csdn.net/zhong_han_jun/arti ...
- 解决iscroll.js上拉下拉刷新手指划出屏幕页面无法回弹问题
博客已迁移至http://zlwis.me. 使用过iscroll.js的上拉下拉刷新效果的朋友应该都碰到过这个问题:在iOS的浏览器中,上拉或下拉刷新时,当手指划出屏幕后,页面无法弹回.很多人因为解 ...
- Daily Scrum (2015/11/8)
由于编译大作业临近deadline以及各项选修课即将结课,虽然PM强调软工任务也很紧迫,但是大多数成员表示今天想请假一天.符美潇今天把自己所负责的数据库编码部分和谢金洛的UI进行了对接.在测试过程中发 ...
- Python中,os.listdir遍历纯数字文件乱序如何解决
Python中,os.listdir遍历纯数字文件乱序如何解决 日常跑深度学习视觉相关代码时,常常需要对数据集进行处理.许多图像文件名是利用纯数字递增的方式命名.通常所用的排序函数sort(),是按照 ...
- Ubuntu下ssh连接在服务端显示图形界面
Ubuntu下ssh连接在服务端显示图形界面 step1 安装ssh服务 服务端安装运行ssh,在终端运行命令如下: sudo apt-get install openssh-server 在客户端安 ...
- asp.net文件上传接收不到文件 Request.files["']等于null
这个时候你应该检查下你的form表单里面是否配置了这个: enctype ="multipart/form-data" 新手容易出错哦. <form id="fo ...