序列 做题记录
当 \(k=0\) 时,所有的数奇偶性都一样,所以答案为 \(n!\)。
否则有 \(\lceil \frac{n}{2} \rceil\) 个数是一个奇偶性的,另外 \(\lfloor \frac{n}{2}\rfloor\) 个数是另一个奇偶性的。如果 \(\lceil \frac{n}{2} \rceil = \lfloor \frac{n}{2}\rfloor\),那么两种数可以交换,答案为 \(2x!y!\),否则为 \(x!y!\)。
点击查看代码
void work() {
in2(n,k);
inn(a,n);
For(i,1,n) a[i]&=1;
int x=0;
For(i,1,n) if(a[i]) x++;
int y=n-x;
if(k==0) {
bool flg=1;
For(i,1,n-1) if(a[i]!=a[i+1]) {
cout<<0;
flg=0;
break;
}
if(flg) cout<<fac[n];
}
else {
int X=(n+1)/2,Y=n/2;
if(x<y) swap(x,y);
if(x!=X||y!=Y) cout<<0;
else if(X==Y) cout<<2*fac[x]*fac[y]%mod;
else cout<<fac[x]*fac[y]%mod;
}
puts("");
}
本文来自博客园,作者:coding_goat_qwq,转载请注明原文链接:https://www.cnblogs.com/CodingGoat/p/18488269