zoukankan      html  css  js  c++  java
  • HDU 4506 小明系列故事——师兄帮帮忙(二分快速幂)

    题意:就是输入一个数组,这个数组在不断滚动,而且每滚动一次后都要乘以一个数,用公式来说就是a[i] = a[i-1] * k;然后最后一位的滚动到第一位去。

    解题报告:因为题目中的k要乘很多次,达到了10^9级别,所以,这题其实就是一个二分快速幂,先求出k的t次方,然后只要注意下输出时不一定是从数组的第一个数开始输出就是 了。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 typedef __int64 INT;
     7 const INT MOD = 1000000007;
     8 INT que[10005];
     9 INT qpower(INT k,INT t)
    10 {
    11     INT temp = 1;
    12     INT ret = k;
    13     while(t)
    14     {
    15         if(t & 1) temp *= ret;
    16         temp %= MOD; 
    17         t >>= 1;
    18         ret *= ret;
    19         ret %= MOD;
    20     }
    21     return temp;
    22 }
    23 int main()
    24 {
    25     int T;
    26     scanf("%d",&T);
    27     INT n,t,k,temp;
    28     while(T--)
    29     {
    30         scanf("%I64d%I64d%I64d",&n,&t,&k);
    31         for(int i = 0;i < n;++i)
    32         scanf("%I64d",&que[i]);
    33         temp = qpower(k,t);
    34         for(int i = 0;i < n;++i)
    35         que[i] = (que[i] * temp) % MOD;
    36         int f = 0;
    37         for(int i = (n - t % n) % n;f < n;f++)
    38         {
    39             printf(f? " %I64d":"%I64d",que[i]);
    40             i = (i + 1) % n;
    41         }
    42         printf("
    ");
    43     }
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    Caesar cipher
    遗传算法之背包问题
    Transport scheme NOT recognized: [stomp]
    error running git
    Canvas 旋转的图片
    canvas时钟
    火箭起飞
    让图标转起来
    Tomcat启动脚本
    Task中的异常处理
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3602727.html
Copyright © 2011-2022 走看看