Summer Training #13 Div.2 C(公式题)

题目链接   Gym 100541D

题意:给定x,k,(x,k皆小于exp(9)),问进行k次操作后x=x+xmod(100)值为多少

题解:推导可得,每进行20次操作,x加上同一个值

代码

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<vector>
#include<map>
using namespace std;
int main(){
    int i,j,n,k,temp,T;
    long long int ans,sum[105],a[100];
    scanf("%d",&T);
    while(T--){
    scanf("%d%d",&n,&k);
    ans=0;
    memset(sum,0,sizeof(sum));
    sum[1]=4*(n%100)%100;
    temp=n%100;
    a[1]=4;
    for(i=2;i<=20;i++){
        a[i]=(a[i-1]*2)%100;
        sum[i]=sum[i-1]+((a[i]%100)*temp)%100;
    }
    if(k==1)ans=n%100+n;
    else if(k==2)ans=n+n%100+(2*n)%100;
    else ans=n+n%100+(2*n)%100+(k-2)/20*sum[20]+sum[(k-2)%20];
    printf("%lld\n",ans);

    }
    return 0;
}
View Code

 

posted @ 2016-07-26 00:07  flowing_water  阅读(131)  评论(0)    收藏  举报