Cod sursa(job #2054225)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 1 noiembrie 2017 19:53:03
Problema Calcul Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstring>
#include <cstdio>
#include <vector>
#define N 500005

using namespace std;

int a, c;
long long mod=1, rez;
char s[N];
vector <int> b;

void calc_modulo()
{
    for(int i=1;i<=c;i++)
        mod=mod*10;
}

void calc_putere()
{
    for(int i=0;i<strlen(s);i++)
    {
        int var;
        if(s[i]>='0' && s[i]<='9')
            var=s[i]-'0';
        else
            var=s[i]-'A'+10;
        for(int i=3;i>=0;i--)
            if(var>=(1<<i))
            {
                b.push_back(1);
                var-=1<<i;
            }
            else
                b.push_back(0);
    }
}

void calc_rez()
{
    long long x=1;
    for(int i=0;i<b.size();i++)
    {
        rez=(rez*(x+1))%mod;
        x=(x*x)%mod;
        if(b[i])
        {
            x=(x*a)%mod;
            rez=(rez+x)%mod;
        }
    }
}

int main()
{
    freopen("calcul.in", "r", stdin);
    freopen("calcul.out", "w", stdout);

    scanf("%d\n%s\n%d\n", &a, s, &c);
    calc_modulo();
    a=a%mod;
    calc_putere();
    calc_rez();
    printf("%lld", rez);
    return 0;
}