zoukankan      html  css  js  c++  java
  • [快速幂][NOIP2012]转圈游戏

    转圈游戏

    题目描述

        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号位置。 
        现在,一共进行了 10k轮,请问x号小伙伴最后走到了第几号位置。

    输入

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

    输出

    输出文件名为circle.out。
    输出共1行,包含 1个整数,表示10k轮后 x号小伙伴所在的位置编号。

    样例输入

    10 3 4 5

    样例输出

    5

    提示

    【数据说明】

    对于30%的数据,0 <k < 7;

    对于80%的数据,0 < k < 107

    对于100%的数据,1 <n < 1,000,000,0 <m <n,1 ≤ x ≤ n,0 < k < 109

     
     
    解法是快速幂
    ans = (x + 10 ^ k * m) mod n
    代码:
     1 #include<cstdio>
     2 #include<cstring>
     3 
     4 long long n, m; 
     5 
     6 long long read(){
     7     int x = 0, f = 1; 
     8     char ch = getchar(); 
     9     while (ch < '0' || ch > '9') {
    10         if (ch == '-') {
    11             f = -1;  
    12         } 
    13         ch = getchar(); 
    14     }
    15     while (ch >= '0' && ch <= '9') {
    16         x = x * 10 + ch - '0'; 
    17         ch = getchar(); 
    18     }
    19     return x * f; 
    20 }
    21 
    22 long long pow(long long a, long long b){
    23     long long res = 1; 
    24     while (b) {
    25         if (b & 1) {
    26             res = res * a % n; 
    27         }
    28         a = a * a % n; 
    29         b >>= 1; 
    30     }
    31     return res % n; 
    32 }
    33 
    34 int main(){
    35     int k, x; 
    36     n = read(); 
    37     m = read(); 
    38     k = read(); 
    39     x = read(); 
    40     long long ans = pow(10LL, k) % n; 
    41     ans = ans * m % n; 
    42     ans = (ans + x) % n; 
    43     printf("%lld", ans); 
    44     return 0; 
    45 }
  • 相关阅读:
    第一次作业
    第0次作业
    第14、15周作业
    第七周作业
    第六周作业
    第四周作业
    第三周作业
    第4次作业
    第3次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/GldHkkowo/p/8898450.html
Copyright © 2011-2022 走看看