Cod sursa(job #3280399)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 26 februarie 2025 12:49:59
Problema Sandokan Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#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;
}