Submission #1869397


Source Code Expand

#include "bits/stdc++.h"
using namespace std;

#define DEBUG(x) cout<<#x<<": "<<x<<endl;
#define DEBUG_VEC(v) cout<<#v<<":";for(int i=0;i<v.size();i++) cout<<" "<<v[i]; cout<<endl

typedef long long ll;
#define vi vector<int>
#define vl vector<ll>
#define vii vector< vector<int> >
#define vll vector< vector<ll> >
#define vs vector<string>
#define pii pair<int,int>
#define pis pair<int,string>
#define psi pair<string,int>
#define pll pair<ll,ll>
const int inf = 1000000001;
const ll INF = 1e18 * 2;
#define MOD 1000000007
#define mod 1000000009
#define pi 3.14159265358979323846
#define Sp(p) cout<<setprecision(15)<< fixed<<p<<endl;
int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 };
int dx2[8] = { 1,1,0,-1,-1,-1,0,1 }, dy2[8] = { 0,1,1,1,0,-1,-1,-1 };


struct Modint {
	ll n;
	static const ll Mod = 1000000007;
	Modint(int n = 0) : n(n) {}
};

Modint operator+(Modint a, Modint b) { return Modint((a.n += b.n) >= mod ? a.n - a.Mod : a.n); }
Modint operator-(Modint a, Modint b) { return Modint((a.n -= b.n) < 0 ? a.n + a.Mod : a.n); }
Modint operator*(Modint a, Modint b) { return Modint(1LL * a.n * b.n % a.Mod); }
Modint &operator+=(Modint &a, Modint b) { return a = a + b; }
Modint &operator-=(Modint &a, Modint b) { return a = a - b; }
Modint &operator*=(Modint &a, Modint b) { return a = a * b; }

ll MAXM = 100100;
vector<Modint> fact(MAXM);
vector<Modint> C(MAXM);

Modint modpow(Modint a, int b) {
	Modint ret = 1;
	while (b > 0) {
		if (b & 1) ret *= a;
		a *= a;
		b >>= 1;
	}
	return ret;
}

Modint modinv(Modint a) {
	return modpow(a, a.Mod - 2);
}

Modint nCr(Modint n, ll r) {
	Modint ret = fact[n.n];
	ret *= modinv(fact[r]);
	ret *= modinv(fact[n.n - r]);
	return ret;
}

Modint nCr(Modint n, Modint r) {
	Modint ret = fact[n.n];
	ret *= modinv(r.n);
	ret *= modinv(fact[n.n - r.n]);
	return ret;
}


int main() {
	int n, i, j;
	cin >> n;

	Modint one(1);
	
	fact[0] = one;
	for (i = 1; i <= n + 1; i++) {
		fact[i] = (i*fact[i - 1]);
	}

	vi a(n + 1);
	vi ichi(n + 1, -1);
	int x1, x2;
	for (i = 0; i < n + 1; i++) {
		cin >> a[i];
		if (ichi[a[i]] == -1) {
			ichi[a[i]] = i;
		}
		else {
			x1 = ichi[a[i]];
			x2 = i;
		}
	}
	//cout << x1 << " " << x2 << endl;
	for (int k = 1; k <= n + 1; k++) {
		Modint cnt(0);
		//cout << nCr(n + 1, k) << endl;
		cnt += nCr(n + 1, k);
		if (k <= n + x1 - x2 + 1) {
			cnt -= nCr(n + x1 - x2, k - 1);
		}
		while (cnt.n < 0) {
			cnt += MOD;
		}
		cout << cnt.n << endl;
	}
	
}

Submission Info

Submission Time
Task D - 11
User fuppy0716
Language C++14 (GCC 5.4.1)
Score 600
Code Size 2548 Byte
Status AC
Exec Time 243 ms
Memory 3584 KB

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 243 ms 3584 KB
mx.txt AC 211 ms 3584 KB
rnd_0.txt AC 192 ms 3200 KB
rnd_1.txt AC 157 ms 3072 KB
rnd_2.txt AC 48 ms 2176 KB
rnd_3.txt AC 42 ms 2048 KB
rnd_4.txt AC 66 ms 2304 KB
sample1.txt AC 2 ms 1792 KB
sample2.txt AC 2 ms 1792 KB
sample3.txt AC 2 ms 1792 KB