题解:AT_arc077_b [ABC066D] 11
思路
组合数学题。
题目说有
我们设这个重复的数字第一次为
代码
#include<bits/stdc++.h>
#define int long long
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
using namespace std;
const int N = 2e5 + 5, MOD = 1e9 + 7;
int n, a[N], k, vis[N];
int fac[N], inv[N];
int ksm(int a, int b)
{
int res = 1;
for(; b; b >>= 1)
{
if(b & 1) res = res * a % MOD;
a = a * a % MOD;
}
return res;
}
int C(int x, int y)
{
if(x < y) return 0;
return fac[x] * inv[y] % MOD * inv[x - y] % MOD;
}
void init()
{
fac[0] = inv[0] = 1;
rep(i, 1, n)
{
fac[i] = fac[i - 1] * i % MOD;
inv[i] = ksm(fac[i], MOD - 2);
}
}
main()
{
scanf("%lld", &n); ++ n; init();
rep(i, 1, n)
{
scanf("%lld", &a[i]);
if(!vis[a[i]]) vis[a[i]] = i;
else k = i - vis[a[i]] + 1;
}
rep(i, 1, n)
{
int ans = C(n, i) % MOD;
int cnt = C(n - k, i - 1) % MOD;
printf("%lld\n", (ans + MOD - cnt) % MOD);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步