码迷,mamicode.com
首页 > 其他好文 > 详细

ZJU校赛 一道计数题

时间:2017-04-09 21:05:56      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:过程   strong   日历   计数   表示   最大   时间   多少   存在   

题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000

对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列

对于这个剩下的矩阵,我们考虑其中是否存在特殊的元素,保证这些元素是所在行最大,所在列最小的元素 且非之一。

求对于所有删法,上述元素个数之和 对10^9+7取余。

显然所有删法 有2^(n+m)种 暴力是搞不定的。

于是反过来看,矩阵的元素最多有10^6个 是不是可以考虑每一个元素对最终答案的贡献?

所谓贡献,就是它在哪几种删法的矩阵中是“特殊的元素”。

于是,我们考虑对于任意一个元素,在它所在的行有多少严格小于它的,在它所在的列有多少严格大于它的 然后乘法原理一下,就可以知道这个元素对答案的贡献是多少了。

没有想到好的预处理方法可以在常数时间内回答上述询问,于是考虑在遍历元素的过程中直接求得上述询问。

首先对所有元素排序,(当然提前标记好每个元素所在行和所在列)

这样当我们遍历到其中某个元素时,根据之前遍历过的元素以及元素总和,知道所在行列的具体情况了,然后对2的1000次幂提前打表储存,最后的复杂度为O(N*M) 顺利AC

代码没有,实现起来并不困难,反正一次A了。

 

————————————————

 

吐槽一下ZJU校赛,竟然 竟然有三道水题!!!

我做完两道估计就没有水题了,于是花了一个小时写这道计数题,回头看还有一道日历的水题,时间不够调不出来了。。。卒 还好顺利晋级省赛,希望和新的队友密切配合拿下省赛。

 

ZJU校赛 一道计数题

标签:过程   strong   日历   计数   表示   最大   时间   多少   存在   

原文地址:http://www.cnblogs.com/heisenberg-/p/6686280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!