Cod sursa(job #2090335)

Utilizator RaduPatraRadu Patra RaduPatra Data 17 decembrie 2017 22:14:10
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream in ("spion.in");
ofstream out ("spion.out");
long long mod=100003,fact[100003];

long long lgput(long long a, long long b)
{
    long long rest=1;
    while (b>1)
    {
        if(b%2==0)
        {
            a=(a*a)%mod;
            b=b/2;
        }
        else
        {
            rest=(rest*a)%mod;
            b=(b-1);
        }
    }
    a=a*rest;
    return a%mod;
}
void factorial (long long a)
{
    int i;
    fact[1]=1;
    for (i=2; i<=a; i++)
        fact[i]=(i*fact[i-1])%mod;
}

long long combinari (long long a, long long b)
{
    long long x,y;
    x=lgput((fact[b]),mod-2)%mod;
    y=lgput(fact[a-b],mod-2)%mod;

    if (a==b)return 0;
    return fact[a]*x*y;
}

int main()
{
    long long i,t,k=0,n=0;
    char s[100003];

    in>>t;
    in.ignore();
    in.get(s,100003);
    for (i=0; i<strlen(s); i++)
    {
        if (s[i]=='E')
            k++;
        n++;
    }
    if (t==1)
        out<<k+1;
    if (t==2)
    {
        factorial(n);
        out<<combinari(n,k)%mod;
    }
    return 0;
}