题解 CF1437F 【Emotional Fishermen】
考虑最后的序列一定是:
的形式(其中
将原序列从小到大排序,定义
然后令
如果上一个位置是
时间复杂度
inline void solve() {
dp[0]=1,lim[0]=-1;
lep(i,1,n) lep(j,0,lim[i]) {
int res=mul(C(n-lim[j]-2,lim[i]-lim[j]-1),fac[lim[i]-lim[j]-1]);
pls(dp[i],mul(dp[j],res));
}
lim[n]==n-1?printf("%d\n",dp[n]):puts("0");
}
int main() {
init();
IN(n);
lep(i,1,n) IN(a[i]);
std::sort(a+1,a+1+n);
lep(i,1,n) {
lim[i]=lim[i-1];
while(2*a[lim[i]+1]<=a[i]) ++lim[i];
}
solve();
return 0;
}