[vijos1554&bzoj1411]硬币游戏<快速幂>
题目链接: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]硬币游戏<快速幂>的更多相关文章
- NOIP 2013提高组day 1 T 1转圈游戏 快速幂
描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推 ...
- NOIP2013T1 转圈游戏 快速幂
描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, --, 依此 ...
- noip2013提高组day1第一题-转圈游戏——快速幂典型应用
所谓的快速幂: // 计算 m^n % k 的快速幂算法 int quickpow(int m,int n,int k) { ; ) { ) b = (b*m)%k; n = n >> ; ...
- 【NOIP2013】转圈游戏 快速幂
题目大意:给你四个整数$n,m,k,x$,求$(x+m\times 10^k)%n$. 直接一个快速幂就好了,注意开$long\ long$. #include<bits/stdc++.h> ...
- luogu1965 转圈游戏 (快速幂)
求(m*10^k+x)%n即可 #include<cstdio> #include<cstring> #include<algorithm> #define LL ...
- 洛谷 P1965 转圈游戏 —— 快速幂
题目:https://www.luogu.org/problemnew/show/P1965 居然真的就只是 ( x + m * 10k % n ) % n 代码如下: #include<ios ...
- BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 897 Solved: 394[Submit][Status ...
- bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 613 Solved: 256[Submit][Status] ...
- “盛大游戏杯”第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 描述 在一个矩形的灰度图像上,每个 ...
随机推荐
- javascript功能插件大集合 前端常用插件 js常用插件
转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具.•npm – npm 是 javascript 的包管 ...
- JS的类
JS在创建之初不支持类,因为很多开发者为处理类创建了好多代码库,最终导致ES6引入了类. ES5及更早的版本都不支持类,与类最接近的是:创建一个构造器,然后将方法指派到该构造器的原型上.就是原型继承. ...
- FPGA边沿检测Verilog代码
FPGA边沿检测Verilog代码(上升沿,下降沿,双边沿) 实现思路:用两个一位寄存器直接异或可以实现 代码实现: module edge_detect( input clk, input rs ...
- 在Tomcat上发布Web项目的方式
一. Tomcat的使用: 安装:解压压缩包即可 注意:安装目录不能有中文 目录结构: ①bin:可执行文件 ②conf:可执行文件 ③lib:依赖的jar包 ④logs:日志文件 ⑤:temp:临时 ...
- Python学习字典.基础三
元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组中要定义的元组中只有一个元素需要再元素后面加逗号,用来消除数学歧义.例 t=(1,) ...
- Python包的应用
包的简介 你们听到的包,可不是女同胞疯狂喜欢的那个包,我们来看看这个是啥包 官方解释: ? 1 2 3 4 5 6 7 8 9 Packages are a way of structuring Py ...
- vquery 一些应用
// JavaScript Document function myAddEvent(obj,sEv,fn){ if(obj.attachEvent){ obj.attachEvent('on'+sE ...
- 计算广告中的CPM和eCPM
计算广告中的CPM和eCPM CPM和eCPM分别是什么? CPM(Cost per Mille ) : 千次展示付费.是针对广告主说的,你要花多少钱,购买一千次广告展示的机会.类似的还有CPC (C ...
- DS01-线性表
0.PTA得分截图 1.本周内容总结 1.1总结线性表内容 顺序表结构体定义 typedef struct LNode *List struct LNode { ElementType Data[MA ...
- Natas25 Writeup(目录遍历、头部注入)
Natas25: 打开页面,是一段引文以及可以选择语言的下拉list.查看源码,发现关键代码: function setLanguage(){ //选择语言 /* language setup */ ...