NBUT1225 NEW RDSP MODE I(快速幂,规律):
G - NEW RDSP MODE I
题意:
给你三个数n,n,n,mmm,xxx。代表刚开始有1到n1 到n1到n刚好n个数,现在让你将序列变换mmm次,问你变换mmm次之后前xxx个的值;
序列每一次变换的规则:将其中奇数位置的数取出,按顺序放在最后面。
思路:
因为变换的规则比较简单,所以我们可以根据这次位置 计算出 变换前的位置,向上推导mmm次即可,那么我们可以先写出变换公式。
假设位置x变换前在位置last,那么我们不难推出下列公式:
如果 x<=⌊n/2⌋x<=\lfloor n/2 \rfloorx<=⌊n/2⌋ 则有 last=2∗xlast=2*xlast=2∗x
否则 则有last=2∗(x−⌊n/2⌋)−1last=2*(x-\lfloor n/2 \rfloor)-1last=2∗(x−⌊n/2⌋)−1
这样规律显示的不够清楚,我们可以这样写
当n为偶数时候:
- 如果x<=nx<=nx<=n,则有 last=2∗xlast=2*xlast=2∗x.
- 否则last=2∗(x−n/2)−1=2∗x−n−1last=2*(x-n/2)-1=2*x-n-1last=2∗(x−n/2)−1=2∗x−n−1
当n为奇数的时候:
- 如果x<=(n+1)/2x<=(n+1)/2x<=(n+1)/2, 则有last=2∗xlast=2*xlast=2∗x
- 否则last=2∗(x−(n+1)/2)−1last=2*(x-(n+1)/2)-1last=2∗(x−(n+1)/2)−1 即 last=2∗x−nlast=2*x-nlast=2∗x−n
那么我们可以将位置xxx向上推导mmm次,最后得到的位置就是要求的位置xxx的值。但是mmm太大,这种根本不可行,我们现在试图找一个更好的公式。
我们有没有发现一个规律,**当nnn为奇数的时候 lastlastlast 可以表示为 last=2∗x%nlast=2*x\ \%nlast=2∗x %n ,(如果last=0last=0last=0表示last=n);**那么我们向上求mmm次,则乘以2m2^m2m取余nnn即可 (快速幂不难做到这一点)。但是当nnn位偶数的时候怎么办呢?我们发现当nnn位偶数时n个数n个数n个数的结果与n+1n+1n+1的结果一模一样。
因为第n+1n+1n+1个数每次都是最后一个奇数,他总会放在最后面,不影响前nnn个数的相对顺序
所以我们当nnn为偶数时,我们可以把n+1n+1n+1变为奇数,然后位置xxx的转换mmm次前的位置为 x∗2mx*2^m%n+1x∗2m 。
所以程序思想分下面三步:
- 如果nnn为偶数就让n=n+1n=n+1n=n+1
- 转换mmm次后位置xxx的值为val=x∗2mval=x*2^m%nval=x∗2m
- 如果valvalval为000则输出nnn,否则输出valvalval。
代码:
#include<queue>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define mset(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef pair<int,int> P;
typedef long long ll;
const int maxn=2e4+100;
int t;
ll quickPow(ll a,ll b,ll mod){ll ans=1ll;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}
int main()
{ll n,m,x,ans;while(cin>>n>>m>>x){if(n%2==0) n++;ll mid=quickPow(2,m,n);for(ll i=1;i<=x;++i){if(i>1)cout<<" ";ans=i*mid%n;if(ans==0)cout<<n;elsecout<<ans;}puts("");}return 0;
}
NBUT1225 NEW RDSP MODE I(快速幂,规律):相关推荐
- NBUT1225 NEW RDSP MODE I(快速幂,规律)
题目: [1225] NEW RDSP MODE I 时间限制: 1000 ms 内存限制: 131072 K 问题描述 Little A has became fascinated with the ...
- NBUT 1225 NEW RDSP MODE I (规律+快速幂)
[1225] NEW RDSP MODE I 时间限制: 1000 ms 内存限制: 131072 K 问题描述 Little A has became fascinated with the gam ...
- NBUT 1225 NEW RDSP MODE I(找规律)(快速幂)
NEW RDSP MODE I 问题描述 Little A has became fascinated with the game Dota recently, but he is not a goo ...
- NEW RDSP MODE I (快速幂)
题目: 问题 : NEW RDSP MODE I 题目描述 Little A has became fascinated with the game Dota recently, but he is ...
- 保研机试——2数学问题(简单数学、最大公约/最小公倍、分数运算、素数、质因子分解、快速幂、高精度问题、常见数学公式总结、规律神器OEIS)
1 简单数学 2 最大公约/最小公倍 3 分数运算 4 素数 5 快速幂 5 高精度问题 6 常见数学公式总结 7 规律神器OEIS 1 简单数学 (1)同余模定理:所谓的同余,顾名思义,就是许多的数 ...
- ZOJ3785 What day is that day? 快速幂+找规律
点击打开链接 It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days? Input There are multi ...
- 【快速幂+中等难度】Calculation 哈工大HITOJ2901
这些天好颓啊..都没有A题,只是各种等着填的坑..简直.. 这道题....其实是快速幂模板题..为了学习矩阵快速幂,顺手复习下快速幂... 哈工大的OJ其实还挺友好的.速度也快..赞一个.. 翻译 给 ...
- 51nod 算法马拉松18 B 非010串 矩阵快速幂
51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...
- 一文彻底搞懂快速幂(原理、实现、矩阵快速幂)
前言 大家好,我是bigsai,之前有个小老弟问到一个剑指offer一道相关快速幂的题,这里梳理一下讲一下快速幂! 快速幂是什么? 顾名思义,快速幂就是快速算底数的n次幂.你可能疑问,求n次幂算n次叠 ...
最新文章
- ad中电容用什么封装_干货 | 为什么单相电机要用电容,三相电机不需要电容?...
- linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs
- 机器学习中用到的概率知识_机器学习中有关概率论知识的小结
- 2014多校第一场A题 || HDU 4861 Couple doubi
- WEB文件上传之apache common upload使用(一)
- ubuntu 打包压缩
- php 查询键名是否存在,PHP array_key_exists():检测键名是否位于数组中
- 软件测试漫谈之谈谈技术之外的事情
- 如何在Angular 10中生成QR码
- MySQL深度剖析之索引专题(2021)
- [专栏精选]Unity动画系统的RootMotion
- 接雨水12 · Trapping Rain Water12
- Java中方法中的参数传递
- mt管理器小白破解之路-基础篇第一课
- 程序员的有个坏习惯!
- 软件开发公司怎么选择比较好?-链环科技
- PaddlePaddle - 人脸关键点检测课程笔记
- 为什么火狐浏览器打开默认是hao123
- php计算三角形的面积,PHP实现的简单三角形、矩形周长面积计算器分享
- TUTK[MediaSDK][iOS]没有声音或声音异常
热门文章
- android 发广播屏蔽home键,如何在Android App中屏蔽(拦截)Home按键及其他按键
- paypal的发展 总结笔记
- 生产者消费者模型实现方式:管程法,信号灯法
- 逍遥安卓能安装在虚拟服务器,逍遥安卓模拟器安装环境有哪些要求?
- 【苹果推??iMessage群发设置内容参数】什么是苹果推信?什么是苹果推?什么是日历推
- 高考大数据:全国31省高考难度,哪个才是地狱模式?
- 企业与组织仍然没有实现无纸化的三大原因
- 艾司博讯:拼多多网店账号出现异常该怎么解决?
- table内容超长自动隐藏,鼠标放置后浮动显示全部内容
- c语言转义字符(c语言转义字符是什么意思)