序列 做题记录

\(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("");
}
posted @ 2024-10-21 08:25  coding_goat_qwq  阅读(0)  评论(0编辑  收藏  举报