[Contest20180323]King
跳蚤国王要召开第二届内阁会议,所以把所有跳蚤都召集到了会议室。所有跳蚤在会议室的圆桌前坐成了一个圈,从$1$到$n$标号,每人的面前都有一盏明灯。
就在会议就要开始的时候,国王突然发现,并不是所有的灯都点亮了,有强迫症的他绝不会在有灯没有被点亮的时候开始会议。
现在国王要指定一些位置的跳蚤,他会报出这些跳蚤的序号,让他们把面前的灯改变状态。
可是这些跳蚤大臣并不想开会,虽然这些跳蚤必须按照国王的指令形式行事,但是他们会在国王下达指令之后,偷偷转动面前的桌子任意次(转动一次之后本来在$n$号跳蚤面前的灯就在$1$号跳蚤面前了),这样虽然对应序列的跳蚤确实改变了面前的灯的状态,但是会议并不能开始因为灯还没有全部点亮。
国王也知道这一点,所以他很好奇,他有没有一种办法在有限轮之后开始会议呢?
小w向国王毛遂自荐,国王很怀疑小w的能力,所以为了保证数据强度,国王会给小w一个初始的串,每次问小w一个子串是否能在有限轮之后开始会议。
如果区间长度$len=r-l+1$是奇数,并且不全灭或不全亮,那么无解
假设$len=q\cdot2^k$,其中$q$是奇数,把区间按$i\%2^k$分类,每类$q$盏灯,整个区间有解要求每组都有解,也就是每组全灭或全亮,所以如果没有长度为$2^k$的循环节,那么肯定无解
如果有长度为$2^k$的循环节,那么问题转化成只考虑这$2^k$盏灯,下面证明$2^k$盏灯是一定有解的
以下的多项式系数都是模$2$意义下的数(亮or灭),所有多项式运算在模$x^{2^k}-1$意义下进行(循环位移)
先证$x^{2^k}-1=(x-1)^{2^k}$
对$k$归纳,当$k=0$时显然成立
假设$x^{2^{k-1}}-1=(x-1)^{2^{k-1}}$,那么$(x-1)^{2^k}=\left((x-1)^{2^{k-1}}\right)^2=\left(x^{2^{k-1}}-1\right)^2=x^{2^k}-1$
由归纳法,定理得证
如果把这个区间看成多项式$f(x)$(亮灯系数为$1$,灭灯系数为$0$,系数是模$2$意义下的数),把国王的指令看成多项式$g(x)$,那么大臣旋转桌子$d$位后再执行指令可以看做$f'(x)=f(x)\cdot x^d+g(x)$,国王可以取$g(x)=f(x)$,那么$f'(x)=f(x)\left(x^d+1\right)=f(x)(x-1)(x^{d-1}+\cdots+1)$
国王每下一次命令,$f(x)$就会被乘上$(x-1)$,由$(x-1)^{2^k}=x^{2^k}-1$可得最后$f(x)$会变成$0$(被续取模),所以$2^k$盏灯一定有解
#include<stdio.h>
typedef unsigned long long ull;
char s[100010];
ull h[100010],b[100010];
ull get(int l,int r){return h[r]-h[l-1]*b[r-l+1];}
int main(){
int n,q,i,l,r;
scanf("%d%d%s",&n,&q,s+1);
b[0]=1;
for(i=1;i<=n;i++){
b[i]=b[i-1]*29ull;
h[i]=h[i-1]*29ull+(ull)(s[i]-'0');
}
while(q--){
scanf("%d%d",&l,&r);
i=r-l+1;
i&=-i;
if(l==r||get(l+i,r)==get(l,r-i))
puts("ephemeral");
else
puts("endless");
}
}
[Contest20180323]King的更多相关文章
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- [bzoj1087][scoi2005]互不侵犯king
题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 思路 首先,搜索可以放弃,因为这是一 ...
- King's Quest —— POJ1904(ZOJ2470)Tarjan缩点
King's Quest Time Limit: 15000MS Memory Limit: 65536K Case Time Limit: 2000MS Description Once upon ...
- 【状压DP】bzoj1087 互不侵犯king
一.题目 Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上.下.左.右,以及左上.左下.右上.右下八个方向上附近的各一个格子,共8个格子. I ...
- ZOJ 2334 Monkey King
并查集+左偏树.....合并的时候用左偏树,合并结束后吧父结点全部定成树的根节点,保证任意两个猴子都可以通过Find找到最厉害的猴子 Monkey King ...
- ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout
K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard inpu ...
- BZOJ-1087 互不侵犯King 状压DP+DFS预处理
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...
- POJ1364 King
Description Once, in one kingdom, there was a queen and that queen was expecting a baby. The queen p ...
- [Educational Codeforces Round 16]A. King Moves
[Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...
随机推荐
- MySQL备份之mysqlhotcopy与注意事项
此文章主要向大家介绍的是MySQL备份之mysqlhotcopy与其在实际操作中应注意事项的描述,我们大家都知道实现MySQL数据库备份的常用方法有三个,但是我们今天主要向大家介绍的是其中的一个比较好 ...
- 自定义toolbar教程
1.写toolbar的布局文件 ,toolbar.xml <?xml version="1.0" encoding="utf-8"?> <Re ...
- Javascript 的addEventListener()及attachEvent()区别分析
大家都知道事件的用法就是当某个事件(状况)被触发了之后就会去执行某个Function, 尤其是Javascript, 在当红AJAX的催化下, 了解Javascript的Event用法更加重要, 在这 ...
- jspersonft有关Table数据绑定(一)
一:前言 在公司来就学着做报表,觉得这个报表学着还是很有意义的.jspersonft我在网上搜了一些有关的资料但是不是很多,现在就是学一点就记载一点.好记性不如烂笔头嘛! 二:在jspersonft定 ...
- mybatis的一些特殊符号标识(大于,小于,等于,不等于)
特殊字符 替代符号(红色基本为常用的) & & < < > > ...
- [POJ1180&POJ3709]Batch Scheduling&K-Anonymous Sequence 斜率优化DP
POJ1180 Batch Scheduling Description There is a sequence of N jobs to be processed on one machine. T ...
- tyvj1048 田忌赛马
描述 中国古代的历史故事“田忌赛马”是为大家所熟知的.话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱.现在每匹马的速 ...
- bzoj 1500 修改区间 splay
内个我也不知道哪儿不对,TLE了,说说思路吧 其实思路也没什么说的,就是裸的splay,对于最后一个操作 我们记下每个区间的最长前缀,最长后缀,那么最长子序列就是 前缀,后缀,左子树的后缀+右子树的前 ...
- 渗透测试中如何科学地使用V*P*N
环境说明 Windows7 虚拟机,作为VPN网关,负责拨VPN.VPN可以直接OPENVPN,也可以使用ShadowSocks+SSTap. Kali 虚拟机, 渗透测试工作机 配置步骤 Windo ...
- 应对ubuntu linux图形界面卡住的方法
有的时候,我的ubuntu图形界面会卡住,当然这个时候你可以重新启动,不过最好的办法应该是结束这个桌面进程 那桌面卡住了怎么来结束桌面进程呢? 这时候就需要打开tty了 按下键盘ctrl+alt+f1 ...