• NOIP 2013 转圈游戏


    【题目描述】

    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 号小伙伴所在的位置编号。

    很容易把式子列出来,

    x+M*10^k%n

    然后答案显然了。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cstdlib>
    #define MAXN 100010
    #define in(a) a=read()
    #define REP(i,k,n) for(int i=k;i<=n;i++)
    using namespace std;
    inline long long read(){
        long long x=0,f=1;
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar())
            if(ch=='-')
                f=-1;
        for(;isdigit(ch);ch=getchar())
            x=x*10+ch-'0';
        return x*f;
    }
    long long n;
    long long m,x,k;
    long long ksm(long long a,long long b){
        long long ans=1;
        while(b){
            if(b%2==1)  ans=((ans%n)*(a%n))%n;
            a=(a*a)%n;
            b/=2;
        }
        return ans%n;    
    }
    int main(){
        in(n),in(m),in(k),in(x);
        cout<<(x+(m*ksm(10,k)%n))%n;
        return 0;
    }
  • 相关阅读:
    Perl-统计某电路面积、功耗占比(NVDIA2019笔试)
    Tensorflow 之 loss
    Verilog-同步FIFO
    Verilog-case、casez和casex的区别
    modelsim使用命令
    进制转换工具
    串口写入和读取数据
    串口发送数据——字符串发送与十六进制发送的区别
    字符转换为十六进制 字符串转化为字符数组
    VS2008编了个MFC对话框,编译链接都没有问题,但是运行出来的对话框完全不能点击
  • 原文地址:https://www.cnblogs.com/dijkstra2003/p/10470863.html
Copyright © 2020-2023  润新知