题目链接:https://vijos.org/p/1554

    http://www.lydsy.com/JudgeOnline/problem.php?id=1411

这题真的淫*QAQ。。。

一看题还以为是啥水题,结果啊,是个规律题

我们先来解释一下样例

20202010101010101020   0
01010201010101010201   1
10102020101010102020   2
01020102010101020102   3
20202020201010202020   4
01010101020102010101   5
10101010202020201010   6
01010102010101020101   7
10101020201010202010   8
01010201020102010201   9
10102020202020202020   10
01020101010101010102   11

这后面的数字表示的是第几次操作

然后可以开始找规律了。。。。。。。。。

盯-----------------------------------------------------------------------------------------------------

这个看起来头有点痛,我们优化一波来看

20202010101010101020   0

10102020101010102020   2

20202020201010202020   4

10101010202020201010   6

10101020201010202010   8

10102020202020202020   10

其实我们就可以发现,这个每两次操作,硬币的位置是不会变的,变的只是正反面

然后我们在把这个图继续变换

20202010101010101020   0

10102020101010102020   2

20202020201010202020   4

10101020201010202010   8

我们只留下了2^k次方这些操作

就可以发现,第2^k次方次操作中,第i个数是由最开始的i-2^k和i+2^k这两个数来决定的

所以对于操作次数T

要把T分解成2^k+2^k-1+···+2^1+1这种形式的

其实吧,这就是快速幂

然后快乐的写一个快速幂模板就过了

只是注意一下T是2^60,要用long long存

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<queue>
#include<cmath>
#define maxn 200005
using namespace std; int n;
long long x,d=;
int a[maxn*],b[maxn*]; int did(int pos,long long dis){
int l=((pos-dis)%n+n)%n,r=(pos+dis)%n;
//pos-dis有可能<-n;
if(l==)l=n;if(r==)r=n;
if(a[l]==)return ;
if(!(a[l]^a[r]))return ;
return ;
} void work(){
while(x){
if(x&){
for(int i=;i<=n;i++)
b[i]=did(i,d);
for(int i=;i<=n;i++)
a[i]=b[i];
}
x>>=;d<<=;
}
} int main(){
scanf("%d%lld",&n,&x);n<<=;
for(int i=;i<=n;i+=){
scanf("%d",&a[i]);
}
work();
for(int i=;i<n;i++){
printf("%d ",a[i]);
}printf("%d",a[n]);
}

【总结】

然后看见我的注释没,我就在那里卡了很久,因为我最开始的L是(pos-dis+n)%n;

然后光荣爆炸,毕竟,我没算到pos-dis的绝对值可能是小于n的啊

所以那个位置的正确写法((pos-dis)%n+n)%n;

[vijos1554&bzoj1411]硬币游戏<快速幂>的更多相关文章

  1. NOIP 2013提高组day 1 T 1转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推 ...

  2. NOIP2013T1 转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, --, 依此 ...

  3. noip2013提高组day1第一题-转圈游戏——快速幂典型应用

    所谓的快速幂: // 计算 m^n % k 的快速幂算法 int quickpow(int m,int n,int k) { ; ) { ) b = (b*m)%k; n = n >> ; ...

  4. 【NOIP2013】转圈游戏 快速幂

    题目大意:给你四个整数$n,m,k,x$,求$(x+m\times 10^k)%n$. 直接一个快速幂就好了,注意开$long\ long$. #include<bits/stdc++.h> ...

  5. luogu1965 转圈游戏 (快速幂)

    求(m*10^k+x)%n即可 #include<cstdio> #include<cstring> #include<algorithm> #define LL ...

  6. 洛谷 P1965 转圈游戏 —— 快速幂

    题目:https://www.luogu.org/problemnew/show/P1965 居然真的就只是 ( x + m * 10k % n ) % n 代码如下: #include<ios ...

  7. BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】

    1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 897  Solved: 394[Submit][Status ...

  8. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  9. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

随机推荐

  1. javascript功能插件大集合 前端常用插件 js常用插件

    转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具.•npm – npm 是 javascript 的包管 ...

  2. JS的类

    JS在创建之初不支持类,因为很多开发者为处理类创建了好多代码库,最终导致ES6引入了类. ES5及更早的版本都不支持类,与类最接近的是:创建一个构造器,然后将方法指派到该构造器的原型上.就是原型继承. ...

  3.  FPGA边沿检测Verilog代码

    FPGA边沿检测Verilog代码(上升沿,下降沿,双边沿) 实现思路:用两个一位寄存器直接异或可以实现 代码实现: ​ module edge_detect( input clk, input rs ...

  4. 在Tomcat上发布Web项目的方式

    一. Tomcat的使用: 安装:解压压缩包即可 注意:安装目录不能有中文 目录结构: ①bin:可执行文件 ②conf:可执行文件 ③lib:依赖的jar包 ④logs:日志文件 ⑤:temp:临时 ...

  5. Python学习字典.基础三

    元组   Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组中要定义的元组中只有一个元素需要再元素后面加逗号,用来消除数学歧义.例 t=(1,)   ...

  6. Python包的应用

    包的简介 你们听到的包,可不是女同胞疯狂喜欢的那个包,我们来看看这个是啥包 官方解释: ? 1 2 3 4 5 6 7 8 9 Packages are a way of structuring Py ...

  7. vquery 一些应用

    // JavaScript Document function myAddEvent(obj,sEv,fn){ if(obj.attachEvent){ obj.attachEvent('on'+sE ...

  8. 计算广告中的CPM和eCPM

    计算广告中的CPM和eCPM CPM和eCPM分别是什么? CPM(Cost per Mille ) : 千次展示付费.是针对广告主说的,你要花多少钱,购买一千次广告展示的机会.类似的还有CPC (C ...

  9. DS01-线性表

    0.PTA得分截图 1.本周内容总结 1.1总结线性表内容 顺序表结构体定义 typedef struct LNode *List struct LNode { ElementType Data[MA ...

  10. Natas25 Writeup(目录遍历、头部注入)

    Natas25: 打开页面,是一段引文以及可以选择语言的下拉list.查看源码,发现关键代码: function setLanguage(){ //选择语言 /* language setup */ ...