首页 > 代码库 > Codeforces_327_C

Codeforces_327_C

http://codeforces.com/problemset/problem/327/C

 

等比求和相加,有mod的出现,所以要算逆元。

 

#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define LL long long#define MOD 1000000007using namespace std;char s[100005];int k;LL p_mod(LL a,LL b,LL c){    LL ans = 1;    a = a%c;    while(b > 0)    {        if(b%2 == 1)    ans = (ans*a)%c;        b /= 2;        a = (a*a)%c;    }    return ans;}LL get_inv(LL a,LL c){    return p_mod(a,c-2,c);}int main(){    scanf("%s%d",s,&k);    LL ans = 0;    int len = strlen(s);    LL x = p_mod(2,len,MOD);    LL y = get_inv(x-1,MOD);    x = p_mod(x,k,MOD)-1;    LL z = 0;    for(int i = 0;i < len;i++)    {        if(s[i] == 0 || s[i] == 5)        {            z = (z+p_mod(2,i,MOD))%MOD;        }    }    ans = (((z*x)%MOD*y)%MOD)%MOD;    printf("%I64d\n",ans);    return 0;}

 

Codeforces_327_C