Pagini recente » Cod sursa (job #2293603) | Cod sursa (job #1948479) | Cod sursa (job #1474816) | Cod sursa (job #1199539) | Cod sursa (job #3183470)
#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;
}