zoukankan      html  css  js  c++  java
  • 洛谷 P1965 转圈游戏

    此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

    题目链接

    https://www.luogu.org/problem/show?pid=1965

    题目描述

    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 号小伙伴最后走到了第几号位置。

    输入输出格式

    输入格式:

    输入文件名为 circle.in。

    输入共 1 行,包含 4 个整数 n、m、k、x,每两个整数之间用一个空格隔开。

    输出格式:

    输出文件名为 circle.out。

    输出共 1 行,包含 1 个整数,表示 10

    k 轮后 x 号小伙伴所在的位置编号。

    输入输出样例

    输入样例#1:10 3 4 5

    输出样例#1: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。

    分析

    此题是一道很简单的快速幂模板题

    第1轮后:(x+m) mod n

    第2轮后:((x+m) mod n)+m) mod n =(x+2m) mod n

    第i轮后:(x+i*m) mod n

    所以10 k 轮后x号的位置是(x+10 k *m) mod n

    然后用快速幂跑一下就OK了

    参考代码

     1 #include <cstdio>
     2 #include <iostream>
     3 int n, m, k, x;
     4 int fastpower(int x, int k){
     5     int s = 1;
     6     for (; k; k >>= 1, x = x * x % n)
     7         if (k & 1) s = s * x % n;
     8     return s;
     9 }
    10 int main(){
    11     std::cin >> n >> m >> k >> x;
    12     std::cout << (x + m * fastpower(10, k) % n) % n << std::endl;
    13     return 0;
    14 }

    最后感谢@bwx对博主快速幂学习的指导

  • 相关阅读:
    Json对象与Json字符串互转(4种转换方式)
    Web.config配置文件详解
    jQuery BlockUI Plugin Demo 6(Options)
    jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
    jQuery BlockUI Plugin Demo 4(Element Blocking Examples)
    jQuery BlockUI Plugin Demo 3(Page Blocking Examples)
    jQuery BlockUI Plugin Demo 2
    <configSections> 位置引起的错误
    关于jQuery的cookies插件2.2.0版设置过期时间的说明
    jQuery插件—获取URL参数
  • 原文地址:https://www.cnblogs.com/ylyvictor/p/7752935.html
Copyright © 2011-2022 走看看