zoukankan      html  css  js  c++  java
  • NOIP 2013提高组day 1 T 1转圈游戏 快速幂

    描述

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

    样例1

    样例输入1[复制]

    10 3 4 5

    样例输出1[复制]

    5

    解题报告

           一拿到这道题,首先想到找规律,是一个循环,于是就想到先求出这个循环的位置序列,然后用10^k mod 一次循环的次数便是答案。但是只过了九组数据。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,m,x,ci;
    long k;
    int wz[1000005];
    int main()
    {
        freopen("circle.in","r",stdin);
        freopen("circle.out","w",stdout);
        cin>>n>>m>>k>>x;
        wz[0]=x;
        int b=x,t=0;
        do
        {
            t++;
            b=b+m;
            if (b>=n)
              b=b%n;
            wz[t]=b;
        }while(b!=x);
        int v=1;
        for(long i=1;i<=k;i++)
            {
                if (v==0) v=1;
                v=(v*10)%t;
            }    
        if (v==0) cout<<wz[0];
        else cout<<wz[v];
        return 0;
    }

    后来,知道要用 快速幂 就全过了。。

    复习一下

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long n,m,x;
    long long k;
    int main()
    {
        freopen("circle.in","r",stdin);
        freopen("circle.out","w",stdout);
        cin>>n>>m>>k>>x;
        long long t=1,tmp=10;
        while(k>0)                //快速幂
        {
            if(k%2)t=(t*tmp)%n;   //是奇数 2^(i-1)*1
            k=k>>1;
            tmp=(tmp*tmp)%n;      //如 10^(2^2)=10^(2^1)*10^(2^1) 即tmp*tmp
        }
        x=(x+t*m)%n;
        cout<<x;
        return 0;
    }

    掌握快速幂后,以后的幂的计算就快的多了

  • 相关阅读:
    Spring3:AOP
    Spring2:bean的使用
    Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse
    Vue.js——60分钟组件快速入门(上篇)
    vue父子组件嵌套的时候遇到
    Vue.js——60分钟快速入门
    [Vue warn]: Cannot find element: #app
    关于RabbitMQ以及RabbitMQ和Spring的整合
    spring集成多个rabbitMQ
    RabbitMQ-从基础到实战(5)— 消息的交换(下)
  • 原文地址:https://www.cnblogs.com/lx0319/p/5661678.html
Copyright © 2011-2022 走看看