题目链接
题意:
两种操作:1.相邻的两个方格各放一个方块 2.某个方格上放两各方块
使得每个方格上的方块数相同(奇偶状态相同)
解法: 显而易见每个方格上的方块数只要考虑 奇偶数的状态
利用 操作1可使得相邻的两个方块奇偶状态相互交换
利用 操作2 可使得相邻的两个方块奇偶状态都转变 ,即 奇->偶 偶 -> 奇
那么经过多次使用操作1交换奇偶状态,可使得所有离散的奇偶数”合并“,从而方便使用操作2,使其成为全偶数 或 全奇数
如何使用操作1借鉴某滑动拼图游戏:(通过不断交换可使任意块任意组合)
参考自:博客
#include<bits/stdc++.h> #define ll long long ll mod=998244353; using namespace std; ll ksm(ll a,ll b) { ll re=1; while(b) { if(b&1) re*=a; re%=mod; a=a*a; a%=mod; b/=2; } return re; } int main() { ll n,m,l,r; scanf("%lld%lld%lld%lld",&n,&m,&l,&r); if(n%2&&m%2)//(N*M)%2 { printf("%lld\n",ksm((r-l+1),(n*m))); } else { ll num=r-l+1; ll x=(r-l+1)/2;//偶数 ll y=x;//奇数 if(num%2) { if(l%2) { y++; } else x++; } ll sum=ksm(y+x,n*m)+ksm(y-x,n*m); sum%=mod; sum*=ksm(2,mod-2); sum%=mod; printf("%lld\n",sum); } }
E. Height All the Same 组合数学 快速幂
最新推荐文章于 2020-04-08 20:44:59 发布