255962026-02-21 09:20:24algoproJáték (50 pont)cpp17Elfogadva 50/507ms3576 KiB
// UUID: fb9132e0-3198-4ae6-ae4d-d85c903c7901
#include <iostream>
#include <vector>

using namespace std;

// A feladat által kért moduló
const int MOD = 1000000007;
const int MAX = 200005; // 2*C-B-2 maximum értéke körülbelül 200,000

long long fact[MAX];
long long invFact[MAX];

// Gyorshatványozás a moduláris inverz kiszámításához (Fermat-féle kis tétel)
long long power(long long base, long long exp) {
    long long res = 1;
    base %= MOD;
    while (exp > 0) {
        if (exp % 2 == 1) res = (res * base) % MOD;
        base = (base * base) % MOD;
        exp /= 2;
    }
    return res;
}

// Moduláris inverz kiszámítása
long long modInverse(long long n) {
    return power(n, MOD - 2);
}

// Faktoriálisok előre számolása
void precompute() {
    fact[0] = 1;
    for (int i = 1; i < MAX; i++) {
        fact[i] = (fact[i - 1] * i) % MOD;
    }
    invFact[MAX - 1] = modInverse(fact[MAX - 1]);
    for (int i = MAX - 2; i >= 0; i--) {
        invFact[i] = (invFact[i + 1] * (i + 1)) % MOD;
    }
}

// Binomiális együttható: n alatt a k (mod MOD)
long long nCr(int n, int k) {
    if (k < 0 || k > n) return 0;
    return (((fact[n] * invFact[k]) % MOD) * invFact[n - k]) % MOD;
}

int main() {
    // Optimalizált bemenet olvasás
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    precompute();

    int B, C;
    if (!(cin >> B >> C)) return 0;

    // A levezetett képlet: nCr(2C - B - 2, C - 2) - nCr(2C - B - 2, C - B - 2)
    int n = 2 * C - B - 2;
    int k1 = C - 2;
    int k2 = C - B - 2;

    long long ans1 = nCr(n, k1);
    long long ans2 = nCr(n, k2);

    // Kivonásnál figyelnünk kell a negatív eredményre (adjunk hozzá MOD-ot)
    long long finalAns = (ans1 - ans2 + MOD) % MOD;

    cout << finalAns << endl;

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/06ms3380 KiB
2Elfogadva0/06ms3380 KiB
3Elfogadva2/26ms3380 KiB
4Elfogadva3/36ms3380 KiB
5Elfogadva3/36ms3380 KiB
6Elfogadva3/36ms3380 KiB
7Elfogadva3/36ms3332 KiB
8Elfogadva3/36ms3384 KiB
9Elfogadva3/36ms3380 KiB
10Elfogadva3/36ms3404 KiB
11Elfogadva3/36ms3380 KiB
12Elfogadva3/36ms3360 KiB
13Elfogadva3/37ms3380 KiB
14Elfogadva3/37ms3380 KiB
15Elfogadva3/36ms3576 KiB
16Elfogadva3/36ms3388 KiB
17Elfogadva3/36ms3380 KiB
18Elfogadva3/36ms3456 KiB
19Elfogadva3/36ms3380 KiB