E. Height All the Same

题目大意:

给你一个n*m 的矩阵,让你在里面填数字代表这个位置的高度,数字的范围是[L,R],有两种操作,第一种就是给一位置的高度加2,第二种就是给两个相邻的位置都加1。

求:填完数字,经过若干次两种操作之后可以使得高度相同的填数字方案数是多少?

题解:

其实这个题目最好自己先慢慢想,如果你水平在蓝名接近紫名了,这个应该是可以自己想出来的。

  • 首先你会发现无论怎么填数字,因为可以在任意一个位置增加任意数量的2,所以所有的数字对2取模,最后都会变成一个01的矩阵,所以就转化为一个01矩阵怎么让其变成全为0或者全为1。

  • 这时候就看第二种操作,会发现这个就是让相邻的两个位置取反。

  • 如果我想消去一个1,则需要相邻有1的存在,消去0同理。如果1没有相邻的1,那么它不会改变1或0的数量,这个时候进行第二个操作的本质是在移动这个1的位置,这一点需要理解。

  • 最后你会发现只要是1或者0是偶数个就一定有解。

  • 如果1是偶数个,则可以把偶数个1移动到一起,然后两两消去变成0。如果0是偶数个同理。

  • 所以如果要有解,那么填完数字之后,奇数的数量或者偶数的数量要有一个是偶数。

  • 所以如果n*m 是一个奇数,因为 奇数=奇数+偶数,所以肯定有解,所以每一个位置可以在 [L,R] 的范围内任意取值,所以答案就是 \((R-L+1)^{nm}\)

  • 如果是 n*m 是一个偶数,设偶数个数为x,奇数个数为y。

    则答案应该是 \(C_{nm}^{0}x^{nm}+C_{nm}^{2}x^{nm-2}y^2+C_{nm}^{4}x^{nm-4}y^4...\) 枚举所有的偶数,但是这个不好求啊,高中数学要是学得好应该还是可以想到办法的,因为这个式子的求法高中是学习过的。

    上面的式子就等价于 \((x+y)^{nm}-(x-y)^{nm}\) 这个可以自己推一下,很简单。

做完之和会发现这个其实并不是很难,但是呢,如果可以自己独立完成还是很有成就感的,这种自己有一点思路的题目还是建议尽量独立思考,也许花的时间会比较长,但是对思维能力的提升会快一些。

  1. #include <bits/stdc++.h>
  2. #define inf 0x3f3f3f3f
  3. #define inf64 0x3f3f3f3f3f3f3f3f
  4. using namespace std;
  5. const int maxn=2e4+10;
  6. const int mod=998244353;
  7. typedef long long ll;
  8. long long binpow(long long x,long long b)
  9. {
  10. long long ans=1;
  11. while(b){
  12. if (b&1) ans=ans*x%mod;
  13. x=x*x%mod;
  14. b>>=1;
  15. }
  16. return ans;
  17. }
  18. long long inv(long long x,long long mod)
  19. {
  20. long long k=mod-2,ans=1;
  21. while(k)
  22. {
  23. if (k&1) ans=ans*x%mod;
  24. x=x*x%mod;
  25. k>>=1;
  26. }
  27. return ans;
  28. }
  29. int main(){
  30. ll n,m,l,r;
  31. scanf("%lld%lld%lld%lld",&n,&m,&l,&r);
  32. ll x=r-l+1,b=n*m;
  33. ll ans=binpow(x,b);
  34. if(b%2==0) ans=(ans+(x&1))*inv(2,mod)%mod;
  35. printf("%lld\n",ans);
  36. return 0;
  37. }

E. Height All the Same的更多相关文章

  1. [PyData] 03 - Data Representation

    Ref: http://blog.csdn.net/u013534498/article/details/51399035 如何在Python中实现这五类强大的概率分布 考虑下在mgrid上画二维概率 ...

  2. H5 canvas的 width、height 与style中宽高的区别

    Canvas 的width height属性 1.当使用width height属性时,显示正常不会被拉伸:如下 <canvas id="mycanvas" width=&q ...

  3. height:100% 布局

    常常会碰到需要填满整个浏览器,并且自适应高度的需求.首先肯定会想到给容器设定height:100%,但是会没有效果.原因是body没有高度,所以百分比无法生效. 解决方案:给html,body,标签都 ...

  4. 页面width与height使用百分比来划分不起作用解决办法--记录六

    有时候你写 <div style="width:80%;height:100%;border:1px solid red"></div> <div s ...

  5. Canvas的width,height 和 样式中Canvas的width,height

    控制Canvas的大小,有两种方式: 1:直接设置Canvas标签上的书width,height属性值; 2:通过Css设置Canvas的width,height; 这两种方式,区别是很大的. 1:C ...

  6. Canvas设置width与height 的问题!

    最近因为工作需要,所以就学了一下Html中的Canvas标签. 当我看了一下教程后,自己写了一个hello world的时候,麻烦事就出现了.看下面代码: <!DOCTYPE html> ...

  7. [LeetCode] Queue Reconstruction by Height 根据高度重建队列

    Suppose you have a random list of people standing in a queue. Each person is described by a pair of ...

  8. [LeetCode] Minimum Height Trees 最小高度树

    For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...

  9. 设置height:100%无效的解决方法

    设置height:100%无效的解决方法 刚接触网页排版的新手,常出现这种情况:设置table和div的高height="100%"无效,使用CSS来设置height:" ...

  10. document.documentElement.clientHeight 和 $(window).height() 无法正确获取页面可视区高度

    背景: 弹出层插件(自适应) 实现过程中突然发现在获取可视区高度时,无论document.documentElement.clientHeight 还是 $(window).height()都无法正确 ...

随机推荐

  1. 使用 RestTemplate 进行第三方Rest服务调用

    1. 前言 RestTemplate 是 Spring 提供的一个调用 Restful 服务的抽象层,它简化的同 Restful 服务的通信方式,隐藏了不必要的一些细节,让我们更加优雅地在应用中调用 ...

  2. composer 巨慢的解决之道

    扯点犊子 composer 默认的源是在国外的.默认情况下由于大家都心知肚明的一些原因,导致我们使用composer安装一些插件的时候巨慢无比.这个时候怎么办呢? 原理很简单就是更换我们国内的comp ...

  3. windows 环境下dos 命令符下进D盘(非c盘系统盘)根目录

    怎么进? 先 cd  D: 然后 直接  D: 即可到D盘根目录,至于为啥要输入2遍D 才进D盘根目录,这就是windows的规定

  4. Git应用详解第十讲:Git子库:submodule与subtree.md

    前言 前情提要:Git应用详解第九讲:Git cherry-pick与Git rebase 一个中大型项目往往会依赖几个模块,git提供了子库的概念.可以将这些子模块存放在不同的仓库中,通过submo ...

  5. 💕《给产品经理讲JVM》:垃圾收集器

    前言 在上篇中,我们把 JVM 中的垃圾收集算法有了一个大概的了解,又是一个阴雨连绵的周末,宅在家里的我们又开始了新一轮的学习: 产品大大:上周末我们说了垃圾收集算法,下面是不是要讲一下这些算法的应用 ...

  6. adb命令查看手机应用内存使用情况

    adb shell回车 一.procrank VSS >= RSS >= PSS >= USSVSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)是单个 ...

  7. Linux学习笔记(四)帮助命令

    帮助命令 man info help --help man 英文原意:format and display the on-line manual pages 功能:显示联机帮助手册 语法:man 选项 ...

  8. SQL SERVER 那点事

    温故而知新 一.创建数据库 USE MASTER; GO IF EXISTS(SELECT * FROM sys.databases WHERE [name] = 'student') BEGIN A ...

  9. sql查询慢 查找

    SELECT creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,total_physical_reads N'物理读取总次数' ,tota ...

  10. 用SQL查询分析实现类似金蝶K3的收发存明细表

    使用SQL查询分析实现类收发存的报表,原始需求在 另外一篇文章 的第四部分.下图是实现需求. 一.准备 删除临时表 [buy]判断是否存在临时表,存在则删除[/buy] if OBJECT_ID('t ...