[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 ...
随机推荐
- 从零开始学习MXnet(三)之Model和Module
在我们在MXnet中定义好symbol.写好dataiter并且准备好data之后,就可以开开心的去训练了.一般训练一个网络有两种常用的策略,基于model的和基于module的.今天,我想谈一谈他们 ...
- Java多线程调试如何完成信息输出处理
转载自:http://developer.51cto.com/art/201003/189078.htm Java多线程调试是很繁琐的,但是还是需要我们不断进行相关的学习.下面我们就来看看在Java多 ...
- web上传组件
uploadify jquery插件. common-fileipload; common-io ;jar
- 【poj1226-出现或反转后出现在每个串的最长公共子串】后缀数组
题意:求n个串的最长公共子串,子串出现在一个串中可以是它的反转串出现.总长<=10^4. 题解: 对于每个串,把反转串也连进去.二分长度,分组,判断每个组. #include<cstdio ...
- Linux : 从私钥中提取公钥
已知一个私钥, 如何从其中提取公钥出来? 提取公钥 ssh-keygen -y -f /path/to/private_key > /path/to/public_key
- keras_实现cnn_手写数字识别
# conding:utf-8 import os os.environ[' import numpy as np from keras.models import Sequential from k ...
- 智能合约安全-parity多重签名钱包安全漏洞
漏洞原因: 因为initWallet函数是公开函数( public function) , 攻击者调用initWallet,重新初始化钱包会把之前合约钱包所有者覆盖, 即可改变钱包所有者. 漏洞代码: ...
- exec,eval
一.什么是Exec语句 假如我们一串字符串里面有Python代码,这个时候,普通情况是会把这串代码作为字符串来输出的,而不会执行这段代码.如果此时,我们想执行这串字符串里面的python代码,使用Ex ...
- PHP HERE DOCUMENT
转自: http://www.codeweblog.com/php%E4%B8%ADheredoc%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/ Here ...
- 转:Android 调试桥(adb)是多种用途的工具
转自:http://my.oschina.net/xuwa/blog/1574 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. 可以通过下列几种方法加入 ...