Pagini recente » Cod sursa (job #858623) | Cod sursa (job #1540822) | Cod sursa (job #215016) | Cod sursa (job #3170248) | Cod sursa (job #3280399)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("sandokan.in");
ofstream fout("sandokan.out");
const int NMAX = 5000;
const int MOD = 2000003;
int n, k;
int v[NMAX+1];
int fact[NMAX+1];
/*
Toate numerele sunt distincte deci de fiecare cand alegem un sir de lungime l, vom face l-k operatii
Asadar, raspunsul la problema este C(n,l)*(l-k), pentru orice l > k
*/
void precalc()
{
fact[0] = 1;
for(int i=1; i<=NMAX; i++)
fact[i] = (fact[i-1]*i)%MOD;
}
int fastexp(int b, int exp)
{
int ans = 1;
while(exp)
{
if(exp % 2 == 1)ans = 1ll*(ans*b)%MOD, exp--;
else b = 1ll*(b*b)%MOD, exp/=2;
}
return ans;
}
int invmod(int x)
{
return fastexp(x,MOD-2);
}
int c(int a, int b)
{
return 1ll*(fact[a]*invmod(fact[a-b])*invmod(fact[b]))%MOD;
}
signed main()
{
precalc();
fin >> n >> k;
for(int i=1; i<=n; i++)
fin >> v[i];
int ans = 0;
for(int l=k; l<=n; l++)
{
ans = 1ll*(ans + c(n,l)*(l-k+1))%MOD;
}
fout << ans;
return 0;
}