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 }
     
  • 相关阅读:
    156. Binary Tree Upside Down
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    汉诺塔问题
    算法——二分搜索
    linux内核编程helloworld(中级)
    linux内核入门(1)——基本简介和编译
    linux网络编程概念(一)
    linux配置防火墙
  • 原文地址:https://www.cnblogs.com/fx1998/p/12710479.html
Copyright © 2011-2022 走看看