这题在洛谷上是道黄题,即【普及/提高-】
所以虽然是提高组的,但是其实挺简单的。

我们来看下题面:

[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提高组]转圈游戏 题解相关推荐

  1. NOIP 2013 提高组 货车运输

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  2. 洛谷P1312 [NOIP2011 提高组] Mayan 游戏 题解

    题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7 行 5×5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指 ...

  3. 【Luogu P1965】[NOIP2013 提高组] 转圈游戏

    小目录 链接 题目描述 样例输入 样例输出 思路 代码 链接 luogu P1965 题目描述 有一游戏,规则如下:围圆圈坐,座位编号从0到 n - 1,现有若干轮游戏 每一轮第 0 号位置上的同学顺 ...

  4. 火车运输[NOIP 2013 提高组 Day 1]

    https://vijos.org/p/1843 本题 kruskal+倍增lca WA了三次 T_T 总结出一些注意事项: 1. 一定要想明白每一部分是求最大值还是最小值!!!(WA 1) 2. 注 ...

  5. NOIP 2013 提高组初赛 青蛙跳荷叶

    现有一只青蛙,初始时在 n 号荷叶上.当它某一时刻在 k 号荷叶上时,下一时刻将等概 率地随机跳到 1, 2, -, k 号荷叶之一上,直至跳到 1 号荷叶为止.当 n = 2 时,平均一共 跳 2 ...

  6. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  7. NOIP 2015 提高组 初赛

    NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...

  8. P1199(NOIP2010 普及组)三国游戏 题解

    P1199(NOIP2010 普及组)三国游戏题解 Step-1 输入(重点) 输入n:int n;cin>>n; 输入数组: int a[1001][1001]; for(int i=1 ...

  9. NOIP 2018提高组复赛C/C++试题及答案详解

    NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...

最新文章

  1. python如何实现通知_ExASIC: 用python实现一个通知机器人
  2. Inna and Sequence
  3. 广商14级软件工程分数:第一回合
  4. python不带颜色的图形_用python给黑白图像上色
  5. vs2015 hiredis编译使用
  6. python自动化转码屏幕录像专家exe为mp4
  7. python计算器实验报告_python作业模拟计算器开发(第五周)
  8. echarts实现地图飞线
  9. java.io.ioexception 设备未就绪_AxisFault faultString: java.io.IOException: 设备未就绪。
  10. 【2022-12-10 修订】如何将 BD(蓝光光盘)备份到硬盘 · 播放 BD 和 UHD BD
  11. 浏览器显示DNS服务器可能不可用,浏览器打不开显示dns
  12. 程序员不一定要进大厂,但是算法一定要学
  13. 爱他美英国和德国价格查询_德国,以色列和英国转向开源,新的无人驾驶汽车技术以及更多新闻...
  14. 【中国标准】 DRA音频标准是什么概念?
  15. TikTok运营工具大全(必收藏)
  16. 软件安全理论测试部分
  17. 明争暗斗,淘菜菜硬刚美团、拼多多?
  18. 图像梯度(Image gradient)
  19. 北方的干燥天气,南方的回南天,你喜欢哪个?
  20. IPguard备用服务器设置

热门文章

  1. 如何将 Activity 设置为窗口模式
  2. 配资指数分析配资市场趋势展望
  3. 为何选计算机应用专业,计算机应用专业的为什么要还学电工电子技术啊?
  4. 多重采样和超级采样哪个流畅_蒙特卡洛方法-多重采样
  5. Virtualbox 动态虚拟磁盘文件.vdi文件压缩瘦身方法
  6. jenkins通过SSH Publishers自动构建发包到远程服务器
  7. 2022施工升降机司机(建筑特殊工种)操作证考试题库及在线模拟考试
  8. QT简单的视频播放器
  9. Minifilter 拦截FileMapping IO事件
  10. Yii常用错误处理方法