[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 描述 在一个矩形的灰度图像上,每个 ...
随机推荐
- 7-43 jmu-python-字符串异常处理 (20 分)
输入一行字符串及下标,能取出相应字符.程序能对不合法数据做相应异常处理. 输入格式: 行1:输入一字符串 行2:输入字符下标 输出格式: 下标非数值异常,输出下标要整数 下标越界,输出下标越界 数据正 ...
- # 爬虫连载系列(1)--爬取猫眼电影Top100
前言 学习python有一段时间了,之前一直忙于学习数据分析,耽搁了原本计划的博客更新.趁着这段空闲时间,打算开始更新一个爬虫系列.内容大致包括:使用正则表达式.xpath.BeautifulSoup ...
- codeigniter框架的使用感受和注意事项
codeigniter是一个轻量级的php的web框架,今年2月22日,正式发布了4.0版本.简称CI框架 先使用了CI的3.15版,基本上是不用安装,把框架文件放到web目录下,让后通过简单的配置, ...
- Elasticsearch构建全文搜索系统
目录 前言 一.安装 1.安装elasticsearch 2.启动集群cluster 3.安装管理界面elasticsearch-head 4.安装分词插件elasticsearch-analysis ...
- redis作为消息队列的原理
Redis队列功能介绍 List 转:https://blog.csdn.net/cestlavieqiang/article/details/84197736 常用命令: Blpop删除,并获得该列 ...
- 数据挖掘入门系列教程(四点五)之Apriori算法
目录 数据挖掘入门系列教程(四点五)之Apriori算法 频繁(项集)数据的评判标准 Apriori 算法流程 结尾 数据挖掘入门系列教程(四点五)之Apriori算法 Apriori(先验)算法关联 ...
- css 实战技巧
css 看起来比较简单,但是要想做的好也不是那么容易,我们在平时开发中,主要用css 来美化我们的html结构,所有我觉得css 还是挺重要的,这里记录整理一些关于css 的技巧以及容易忘记的知识点. ...
- 【题解】NOIP 2015 子串
淦!这题我做了三个月啊 题目描述 有两个仅包含小写英文字母的字符串 \(A\) 和 \(B\). 现在要从字符串 \(A\) 中取出 \(k\) 个互不重叠的非空子串,然后把这 \(k\) 个子串按照 ...
- java-打印流(新手)
实例:1.直接输出到文件里面. import java.io.*; //打印流->保持数据原样性并且打印.(各种数据类型.) public class Dyl { public static v ...
- nested exception is java.lang.StackOverflowError解析
背景介绍: 项目是微服务的,使用docker容器,使用jenkins部署.测试环境有个公共服务一直以来都能正常发布,突然有一天不行了,经常发布失败,然后多发布几次就好了. 报错如下: 是栈溢出了,一般 ...