HDU 4506 小明系列故事——师兄帮帮忙(二分快速幂)
2014-03-15 22:40
253 查看
题意:就是输入一个数组,这个数组在不断滚动,而且每滚动一次后都要乘以一个数,用公式来说就是a[i] = a[i-1] * k;然后最后一位的滚动到第一位去。
解题报告:因为题目中的k要乘很多次,达到了10^9级别,所以,这题其实就是一个二分快速幂,先求出k的t次方,然后只要注意下输出时不一定是从数组的第一个数开始输出就是 了。
View Code
解题报告:因为题目中的k要乘很多次,达到了10^9级别,所以,这题其实就是一个二分快速幂,先求出k的t次方,然后只要注意下输出时不一定是从数组的第一个数开始输出就是 了。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef __int64 INT; const INT MOD = 1000000007; INT que[10005]; INT qpower(INT k,INT t) { INT temp = 1; INT ret = k; while(t) { if(t & 1) temp *= ret; temp %= MOD; t >>= 1; ret *= ret; ret %= MOD; } return temp; } int main() { int T; scanf("%d",&T); INT n,t,k,temp; while(T--) { scanf("%I64d%I64d%I64d",&n,&t,&k); for(int i = 0;i < n;++i) scanf("%I64d",&que[i]); temp = qpower(k,t); for(int i = 0;i < n;++i) que[i] = (que[i] * temp) % MOD; int f = 0; for(int i = (n - t % n) % n;f < n;f++) { printf(f? " %I64d":"%I64d",que[i]); i = (i + 1) % n; } printf("\n"); } return 0; }
View Code
相关文章推荐
- hdu 4506 小明系列故事——师兄帮帮忙(快速幂入门)
- hdu 4506 小明系列故事——师兄帮帮忙(快速幂)
- hdu - 4506 小明系列故事——师兄帮帮忙 【快速幂】
- 【HDU】4506 - 小明系列故事——师兄帮帮忙(快速幂)
- hdu 4506 小明系列故事——师兄帮帮忙 找规律+快速幂
- 【HDU 4506 小明系列故事——师兄帮帮忙】+ 找规律
- HDOJ 4506 小明系列故事——师兄帮帮忙(腾讯专场,快速幂)
- HDU 4506 小明系列故事——师兄帮帮忙【map】
- hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】
- 【HDU】-4506-小明系列故事——师兄帮帮忙(快速幂+思维)
- HDU 4506 小明系列故事——师兄帮帮忙(快速幂)
- hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】
- 小明系列故事——师兄帮帮忙 hdu 4506
- HDU 4506 小明系列故事——师兄帮帮忙 (快速幂)
- HDU 4506 小明系列故事——师兄帮帮忙【思维 快速幂 同余定理】
- HDU 4506 小明系列故事——师兄帮帮忙 (快速幂)
- HDU--杭电--4506--小明系列故事——师兄帮帮忙--快速幂取模
- HDU 4506 小明系列故事——师兄帮帮忙
- hdu 4506 小明系列故事——师兄帮帮忙
- 小明系列故事——师兄帮帮忙(hdu 4506,推论题)