Cod sursa(job #3183470)

Utilizator Bianca2507Negret Bianca Bianca2507 Data 11 decembrie 2023 22:18:35
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#define mod 20173333
using namespace std;
ifstream cin("sir9.in");
ofstream cout("sir9.out");
long long ce,nr,ultnr,n,k,f[200002],l,rep,sol[100002],sp[100002];
long long power(long long a,long long b)
{
    if(b==0)
        return 1;
    else
    {
        long long x=power(a,b/2);
        if(b%2==0)
            return x*x%mod;
        else
           return x*x%mod*a%mod;
    }
}
int main()
{
    cin>>ce>>nr>>ultnr;
    /**
    daca e prima cerinta numerele de la 1 la ultimul nr trebuie sa fie obligoriu incluse in sir
    noi avem nr-ultnr poz libere
    n=ultnr
    k=nr-ultnr
    raspunsul e combinari de (n+k-1) luate cate k(stars and bars n-obiecte k-cutii)

   deoarece mod e prim inversul modularul este nr la puterea mod-2
    **/

    if(ce==1)
    {
        n=ultnr;
        k=nr-ultnr;
        f[0]=f[1]=1;
        for(int i=2;i<=100000*2+1;i++)
            f[i]=f[i-1]*i%mod;
       int n1=n+k-1;
        cout<<f[n1]*power(f[k],mod-2)%mod*power(f[n1-k],mod-2)%mod;
    }
    else if(ce==2)
    {
       rep=ultnr;
       sol[0]=1;
       sp[0]=1;
       for(int i=1;i<=nr;i++)
       {
           sol[i]=sp[i-1];
           if(i>=rep+1)
            sol[i]=(sol[i]-sp[i-rep-1]+mod)%mod;
         sp[i]=(sp[i-1]+sol[i])%mod;
       }
       cout<<sol[nr];
    }
    return 0;
}