日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu4506小明系列故事——师兄帮帮忙 (用二进制,大数高速取余)

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu4506小明系列故事——师兄帮帮忙 (用二进制,大数高速取余) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description 小明自從告別了ACM/ICPC之后,就開始潛心研究數學問題了,一則能夠為接下來的考研做準備,再者能夠借此機會幫助一些同學,尤其是美麗的師妹。這不,班里唯一的女生又拿一道數學題來請教小明,小明當然非常高興的就接受了。只是等他細致讀題以后,發現自己也不會做,這下小明囧了:假設回復說自己不懂,豈不是非常沒面子?
  所以,他如今私下求你幫忙解決這道題目,題目是這種:
  給你n個數字,各自是a1,a2,a3,a4,a5……an,這些數字每過一個單位時間就會改變,如果上一個單位時間的數字為a1’,a2’,a3’……an’,那么這個單位時間的數字a[i] = a[i - 1]’ * K(i == 1的時候a[1] = a[n]’ * K),當中K為給定的系數。
  如今的問題就是求第t單位時間的時候這n個數字變成了什么了?因為數字可能會非常大,所以僅僅要你輸出數字對10^9 + 7取余以后的結果。

Input 輸入數據第一行是一個正整數T,表示有T組測試數據;
  每組數據有兩行,第一行包括輸入三個整數n, t, k,當中n代表數字個數,t代表第t個單位時間,k代表系數;第二行輸入n個數字ai,代表每一個數字開始的時候是多少。

  [Technical Specification]
  T <= 100
  1 <= n <= 10 ^ 4
  0 <= t <= 10 ^ 9  當中 t = 0 表示初始狀態
  1 <= k <= 10 ^ 9
  1 <= ai<= 10 ^ 9

Output 對于每組數據請輸出第t單位時間后這n個數字變成了什么,輸出的時候每兩個數字之間輸出一個空格,行末不要輸出多余的空格,詳細見例子。
Sample Input 2 3 2 5 1 2 3 3 0 5 1 2 3
Sample Output 50 75 25 1 2 3#include<stdio.h> #define mod 1000000007 int main() {int n,m,k,i,t;__int64 aa[60],ans[100005],sum;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&k);for(i=1;i<=n;i++){scanf("%I64d",&ans[i]);ans[i]%=mod;}int tk=m,ti=0,a[60];while(tk){a[++ti]=tk%2; tk/=2; }aa[1]=k%mod;for(i=2; i<=ti;i++)aa[i]=(aa[i-1]*aa[i-1])%mod;sum=1;for(i=1; i<=ti; i++)if(a[i])sum=(sum*aa[i])%mod;tk=m%n;if(tk)printf("%I64d",(ans[n-tk+1]*sum)%mod),ti=n-tk+1;else printf("%I64d",(ans[1]*sum)%mod),ti=1;if(ti==1)for(i=2;i<=n;i++)printf(" %I64d",(ans[i]*sum)%mod);else{i=ti-1;for(ti++; ti<=n; ti++)printf(" %I64d",(ans[ti]*sum)%mod);for(ti=1;ti<=i; ti++)printf(" %I64d",(ans[ti]*sum)%mod);}printf("\n");}return 0; }

總結

以上是生活随笔為你收集整理的hdu4506小明系列故事——师兄帮帮忙 (用二进制,大数高速取余)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。