题目链接: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. Typecho 主题制作记录

    模板制作快速入门 模板的制作并非难事,只要你写好了HTML和CSS,嵌套模板就非常简单了,你无需了解标签的内部结构,你只要会使用,模板就能迅速完成.这篇文章只简单的介绍了常用标签的使用方法,希望能带你 ...

  2. SuperBenchmarker一个用.NET编写的压测工具

    0x01 前言 在这之前想必大家对ab(http)与abs(https)也有一些了解,我们今天不去看ab和abs,SuperBenchmarker(sb.exe)是一个压测工具,他是一个受Apache ...

  3. swoole模块的编译安装:php编译安装swoole模块的代码

    本篇文章给大家带来的内容是关于swoole模块的编译安装:php编译安装swoole模块的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.下载swoole 1 wget ht ...

  4. 《JavaScript 模式》读书笔记(2)— 基本技巧1

    这篇文章的主要内容,介绍了一些js编程中的基本技巧,其实这些技巧,大家在开发的过程中,或多或少都在使用,或者已经可以熟练的应用于自己的代码或项目中了.那么,这篇文章,就一起来回顾下这些“基本技巧”. ...

  5. Overt.GrpcTemplate.Service 模板使用教程

    阅读这篇文章需要先阅读我的另外一篇文章,目前还未发布出来,待发布中... 1. Overt.GrpcTemplate.Service .Net Core 3.1 版本 模板名称改成 Overt.Grp ...

  6. redis实现数据库(一)

    转:https://www.cnblogs.com/beiluowuzheng/p/9738159.html 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redis ...

  7. SQL中rownumber的用法

    1)一次排名: 语法:row_number() over(order by 字段 desc/asc):按照某个字段排名 1.1.查询语句: 1.2.查询结果:查询结果按照薪水进行排名 2)先分组后排名 ...

  8. 人见人爱A-B 题解

    参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算.(当然,大家都知道集合的定义,就是 ...

  9. Java 垃圾收集技术

    前言 在计算机科学中,垃圾收回(GC: garbage collection)是内存自动管理的一种方式,它并不是同 Java 语言一起诞生的,实际上,早在 1959 年为了简化 Lisp 语言的手动内 ...

  10. C3p0连接池-Java(新手)

    1 数据库连接池 C3p0 和 Druid 1.1 定义 : 本质上就是个容器(集合) 存放数据库连接的容器 当系统初始化以后 容器被创建 容器中就会申请一些连接对象 当用户来访问的数据库的时候 从容 ...