CF R630 div2 1332 E Height All the Same

LINK:Height All the Same

比赛的时候 被这道题给打自闭了 还有1个多小时的时候开始想 想了30min 无果 放弃治疗。

心态炸了 F不想看了 应该要把题目全看一遍的 下次不能这样了。

首先考虑总共的方案数 ((nm)^{R-L+1})

你发现 什么都没有了 开始分析性质。

这张矩阵图 完全可以变成01矩阵经过每一个格子不断加2 最后统一减去某个值会变成这个样子。

我们想让这个01矩阵变成全0或者全1.

开始手玩 (1*1) 的矩阵可以发现所有方案都合法 (1*3)的也是如此 考虑(1*5)的 发现也是如此。

(1*4)的就不行了。考虑(2*2)的发现不行 考虑(2*3)发现也不行 (2*4)也不行...

考虑(3*3)的 发现可以了....

大力猜结论 奇数个格子都是可以的。

偶数的格子可能可以可能不可以。

经过无数次的试验+大力猜结论 可以发现 当0或1的某个的数量为偶数的时候就可以。剩下的则不行。

这个还是不难猜的 毕竟是从偶数个格子过来的。

那么其实就等价于对于偶数个格子我们进行计算。

给每个格子分配一个权值 最后看他们的奇偶性。

可以发现都为奇数的时候 异或和为奇数 我们给依次给每个格子赋值即可f[i][j]表示前i个格子奇数个偶数或奇数 或偶数个偶数或奇数。

利用矩阵快速幂转移即可。因为一共有nm个格子。

考虑另外一种做法 统计不合法方案吧 考虑有奇数个格子为1剩下的奇数个格子为偶数。

那么方案为(sum_{i=1}^{nm})[(i&1)==1](C(nm,i)w1^{i}w2^{nm-i})

这个东西显然和 二项式定理有关。

不难得到上述式子等于(((w1+w2)^{nm}-(w2-w1)^{nm})/2)

这道题关键是猜出结论。

const ll MAXN=100010;
ll n,m,L,R;
inline ll ksm(ll b,ll p)
{
	if(b==mod)return 0;
	p=p%(mod-1);
	ll cnt=1;
	while(p)
	{
		if(p&1)cnt=cnt*b%mod;
		b=b*b%mod;p=p>>1;
	}
	return cnt;
}
int main()
{
	freopen("1.in","r",stdin);
	get(n);get(m);get(L);get(R);
	if((n*m)&1){putl(ksm(R-L+1,n*m));}
	else
	{
		ll w1=(R-L+1)/2;
		ll w2=w1;
		if((R-L+1)&1)++w1;
		putl((ksm(w1+w2,n*m)+ksm(w1-w2,n*m))%mod*ksm(2,mod-2)%mod);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/chdy/p/12617863.html