[NOIP 2013提高组]转圈游戏 题解
这题在洛谷上是道黄题,即【普及/提高-】
所以虽然是提高组的,但是其实挺简单的。
我们来看下题面:
[NOIP 2013]转圈游戏
刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它的数据范围及其毒瘤,所以我就陷入了沉思。。。
然后我就突然想到了老师教的快速幂,再看时发现这题是如此简单。
这题其实挺裸的,只要稍微推导下就能把答案的公式写出来。
首先,我们可以很明显的想到,这个题目我们只需要维护第xxx个小朋友的位置就行了,于是一个暴力算法便由此而生,当然,喜提TLE。
然后我们就发现其实刚才这个方法就可以直接转换成乘法,那无论是哪个小朋友都肯定会顺时针旋转 (m∗10k)(m*10^k)(m∗10k) 步,但是到这里还不够,因为 (m∗10k)(m*10^k)(m∗10k) 非常有可能超过n,所以别忘了模上 nnn ,要不然就转飞了。
最后我们只要再加上x就行了
所以
ans=(x+m∗10k)modnans = (x+m*10^k) mod n ans=(x+m∗10k)modn
再变换下就成了
ans=[(10kmodn)∗m+x]modnans = [(10^kmodn)*m+x] modn ans=[(10kmodn)∗m+x]modn
然后我们只要把中间的 (10kmodn)(10^kmodn)(10kmodn) 用快速幂求解下再直接算就得了,时间复杂度 O(logn)O(logn)O(logn)
什么?还有人不会快速幂?
快速幂很简单,就是把 nmmodxn^m mod xnmmodx 转化成 nm/2 * nm/2 mod x 或者 nm/2 * nm/2 * n mod x 的形式,递归计算 nmmodxn^m mod xnmmodx 的方法,时间复杂度 O(logN)O(logN)O(logN)
这里就不说多的了,要详细的上网搜去吧
代码
long long power(long long x, long long y) {if (y == 0) {return 1;}long long k = power(x, y >> 1);k = k * k % mod;if (y & 1) {k = k * x % mod;}return k;
}
然后我们回到正题,[NOIP 2013提高组]转圈游戏的题解在这里呢!
// main.cpp
// [NOIP 2013]转圈游戏
#include <iostream>
#include <cstdio>
using namespace std;
long long n, m, k, x;
long long fastPower(long long n, long long m, long long mod) { // return n ^ m % mod | O(logM)if (m == 0) {return 1;}long long k = fastPower(n, m >> 1, mod);k = k * k % mod;if (m & 1) {k *= n;k %= mod;}return k;
}
int main() {// freopen ("circle.in", "r", stdin);// freopen ("circle.out", "w", stdout);cin >> n >> m >> k >> x; // inputlong long ans = fastPower(10, k, n);ans *= m;ans %= n;ans += x;ans %= n;cout << ans << endl; // outputreturn 0;
}
[NOIP 2013提高组]转圈游戏 题解相关推荐
- NOIP 2013 提高组 货车运输
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- 洛谷P1312 [NOIP2011 提高组] Mayan 游戏 题解
题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7 行 5×5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指 ...
- 【Luogu P1965】[NOIP2013 提高组] 转圈游戏
小目录 链接 题目描述 样例输入 样例输出 思路 代码 链接 luogu P1965 题目描述 有一游戏,规则如下:围圆圈坐,座位编号从0到 n - 1,现有若干轮游戏 每一轮第 0 号位置上的同学顺 ...
- 火车运输[NOIP 2013 提高组 Day 1]
https://vijos.org/p/1843 本题 kruskal+倍增lca WA了三次 T_T 总结出一些注意事项: 1. 一定要想明白每一部分是求最大值还是最小值!!!(WA 1) 2. 注 ...
- NOIP 2013 提高组初赛 青蛙跳荷叶
现有一只青蛙,初始时在 n 号荷叶上.当它某一时刻在 k 号荷叶上时,下一时刻将等概 率地随机跳到 1, 2, -, k 号荷叶之一上,直至跳到 1 号荷叶为止.当 n = 2 时,平均一共 跳 2 ...
- 第一届『Citric杯』NOIP提高组模拟赛 题解
[官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...
- NOIP 2015 提高组 初赛
NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...
- P1199(NOIP2010 普及组)三国游戏 题解
P1199(NOIP2010 普及组)三国游戏题解 Step-1 输入(重点) 输入n:int n;cin>>n; 输入数组: int a[1001][1001]; for(int i=1 ...
- NOIP 2018提高组复赛C/C++试题及答案详解
NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...
最新文章
- python如何实现通知_ExASIC: 用python实现一个通知机器人
- Inna and Sequence
- 广商14级软件工程分数:第一回合
- python不带颜色的图形_用python给黑白图像上色
- vs2015 hiredis编译使用
- python自动化转码屏幕录像专家exe为mp4
- python计算器实验报告_python作业模拟计算器开发(第五周)
- echarts实现地图飞线
- java.io.ioexception 设备未就绪_AxisFault faultString: java.io.IOException: 设备未就绪。
- 【2022-12-10 修订】如何将 BD(蓝光光盘)备份到硬盘 · 播放 BD 和 UHD BD
- 浏览器显示DNS服务器可能不可用,浏览器打不开显示dns
- 程序员不一定要进大厂,但是算法一定要学
- 爱他美英国和德国价格查询_德国,以色列和英国转向开源,新的无人驾驶汽车技术以及更多新闻...
- 【中国标准】 DRA音频标准是什么概念?
- TikTok运营工具大全(必收藏)
- 软件安全理论测试部分
- 明争暗斗,淘菜菜硬刚美团、拼多多?
- 图像梯度(Image gradient)
- 北方的干燥天气,南方的回南天,你喜欢哪个?
- IPguard备用服务器设置