Submission #3808682


Source Code Expand

#include <iostream>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <map>
#include <queue>
#include <unordered_map>

static const int MOD = 1000000007;
using ll = long long;
using u32 = unsigned;
using namespace std;

template<class T>
constexpr T INF = ::numeric_limits<T>::max() / 32 * 15 + 208;

template <class T>
T pow_ (T x, T n, T M){
    uint64_t u = 1, xx = x;
    while (n > 0){
        if (n&1) u = u * xx % M;
        xx = xx * xx % M;
        n >>= 1;
    }
    return static_cast<T>(u);
};

template <class T> class Factorial {
    T mod;
    vector<uint64_t> facts, factinv;

public:
    Factorial(int n, T mod) : facts(static_cast<u32>(n+1)), factinv(static_cast<u32>(n+1)), mod(mod) {
        facts[0] = 1;
        for (int i = 1; i < n+1; ++i) facts[i] = facts[i-1]*i % mod;
        factinv[n] = pow_(facts[n], static_cast<uint64_t>(mod - 2), static_cast<uint64_t>(mod));
        for (int i = n-1; i >= 0; --i) factinv[i] = factinv[i+1] * (i+1) % mod;
    }

    T fact(int k) const {
        if(k >= 0) return static_cast<T>(facts[k]);
        else return static_cast<T>(factinv[-k]);
    }

    T operator[](const int &k) const {
        if(k >= 0) return static_cast<T>(facts[k]);
        else return static_cast<T>(factinv[-k]);
    }

    T C(int p, int q) const {
        if(q < 0 || p < q) return 0;
        return static_cast<T>(facts[p]*  factinv[q] % mod * factinv[p-q] % mod);
    }

    T P(int p, int q) const {
        if(q < 0 || p < q) return 0;
        return static_cast<T>((facts[p] * factinv[p-q]) % mod);
    }

    T H(int p, int q) const {
        if(p < 0 || q < 0) return 0;
        return static_cast<T>(q == 0 ? 1 : C(p+q-1, q));
    }
};


int main() {
    int n;
    cin >> n;
    unordered_map<int, int> m;
    int a = -1, b = -1;
    for (int i = 1; i <= n+1; ++i) {
        int k;
        scanf("%d", &k);
        if(m[k] != 0){
            a = m[k]-1, b = i-1;
            break;
        }else {
            m[k] = i;
        }
    }
    Factorial<int> f(n+1, MOD);
    int p = a-b+n;
    for (int i = 1; i <= n+1; ++i) {
        printf("%lld\n", (1000000007LL + f.C(n+1, i) - f.C(p, i-1)) % MOD);
    }
    return 0;
}

Submission Info

Submission Time
Task D - 11
User firiexp
Language C++14 (GCC 5.4.1)
Score 600
Code Size 2278 Byte
Status AC
Exec Time 40 ms
Memory 6948 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:74:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &k);
                        ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 10
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All 1.txt, mx.txt, rnd_0.txt, rnd_1.txt, rnd_2.txt, rnd_3.txt, rnd_4.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
1.txt AC 22 ms 3584 KB
mx.txt AC 40 ms 6948 KB
rnd_0.txt AC 31 ms 5412 KB
rnd_1.txt AC 25 ms 4108 KB
rnd_2.txt AC 9 ms 1536 KB
rnd_3.txt AC 7 ms 1152 KB
rnd_4.txt AC 12 ms 2176 KB
sample1.txt AC 1 ms 256 KB
sample2.txt AC 1 ms 256 KB
sample3.txt AC 1 ms 256 KB