zoukankan      html  css  js  c++  java
  • 蓝桥杯 转圈游戏 快速幂

    问题描述
      n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从0 到 n-1。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,......,依此类 推。
      游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小 伙伴走到第 m+1 号位置,......,依此类推,第n − m号位置上的小伙伴走到第 0 号位置,第 n-m+1 号位置上的小伙伴走到第 1 号位置,......,第 n-1 号位置上的小伙伴顺时针走到第 m-1 号位置。
      现在,一共进行了 10^k 轮,请问 x 号小伙伴最后走到了第几号位置。
    输入格式
      输入共 1 行,包含 4 个整数 n、m、k、x,每两个整数之间用一个空格隔开。
    输出格式
      输出共 1 行,包含 1 个整数,表示 10^k 轮后 x 号小伙伴所在的位置编号。
    样例输入
    10 3 4 5
    样例输出
    5
    数据规模和约定
      对于 30%的数据,0 < k < 7;
      对于 80%的数据,0 < k < 10^7;
      对于 100%的数据,1 < n < 1,000,000,0 < m < n,1 ≤ x ≤ n,0 < k < 10^9。
    如果数据范围小一点的话,可以考虑直接模拟过程。然后看到这个数据范围就直接放弃了。
    万万没想到这一题可以用快速幂解决。
    参考自https://blog.csdn.net/Icefox_zhx/article/details/77018182
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int main() {
     5     ll n, m, k, x;
     6     ll a = 10, ans = 1;
     7     cin >> n >> m >> k >> x;
     8     while (k) {
     9         if (k & 1) {
    10             ans = ans * a % n;
    11         }
    12         a = a * a % n;
    13         k >>= 1; 
    14     }
    15     ans %= n;
    16     ans = (x + ans * m) % n;
    17     cout << ans << endl;
    18     return 0;
    19 }
     
  • 相关阅读:
    vue表单验证定位到错误的地方
    INSPINIA Version 2.5 Bootstrap3
    volatile 彻底搞懂
    solr6.4.2之webservice兼容升级
    快速排序
    Elasticsearch调优篇 10
    TCP 连接为什么需要 3 次握手和 4 次挥手
    搜索技术与方案的选型与思考
    Elasticsearch调优篇 09
    Elasticsearch调优篇 08
  • 原文地址:https://www.cnblogs.com/fx1998/p/12710479.html
Copyright © 2011-2022 走看看