Description

【题目背景】
小Q最近喜欢上了一款游戏,名为《舰队connection》,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名
dalao。在游戏关卡的攻略中,可能由于作战过程中某艘船受到严重损伤,为避免沉没而被迫进行返航,这种情况
大家称为这艘船“假摔”。小Q最喜欢使用的一艘战舰代号为P01,但是最近这艘船总是用各种不同的姿势假摔,于
是小Q打算研究一下原因。
【题意描述】
P01的装甲可以近似看作一个n*m的矩阵,每个位置上的数字代表这个位置装甲的强度。当受到炮击时,防御力为被
炮击的部分的所有位置强度之和。最近小Q发现,敌方有一种船只被称为ENE,它可以发射不同形状的炮弹,以达到
攻击装甲最薄弱处的目的。P01已经被连续k次用不同方式打成了严重损伤(假摔),于是小Q打算分析一下ENE的攻击
力。为了简单起见,我们作如下假设:
1、ENE的炮弹形状无论如何变化,火力值都为一个定值(整数,未知)
2、ENE的炮弹形状只能是长方形(ENE:呵呵),且由于口径的限制,炮弹不能太小(具体来说,对于每一发炮弹长xi
宽yi,有xmin<=xi<=n,ymin<=yi<=m)
3、当ENE的炮击命中P01的某处装甲时,被命中部分的强度之和为P01的防御力,此时,ENE的火力必须严格大于P01
的防御力,才能将其击穿并造成严重损伤(假摔)。
然而,小Q并没有得到详细的中弹数据,只知道P01用k种不同的方式假摔过。两种假摔方式不同,当且仅当受到炮
击的位置不完全相同。因此,不同形状的炮弹击穿护甲时必定可以造成不同的假摔方式,而相同形状的炮弹在不同
的位置击穿护甲也能造成不同的假摔方式。现在,小Q想估计ENE的火力最低是多少。于是,这个任务被交给了你。
举例而言,假设P01的护甲为3*4:
0 1 3 7
1 1 5 5
7 6 9 6
如果ENE的口径至少为2*2,那么直接使用2*2的炮弹攻击左上角2*2的装甲时,只要火力>=4即可造成一种假摔。如
果想造成k=3种不同的假摔方式,至少要拥有12的火力,此时可以造成如下三种假摔方式:
1、2*2炮弹,攻击有数字的部分,装甲值为3
0 1 - -
1 1 - -
- - - -
2、2*2炮弹,攻击有数字的部分,装甲值为10
- 1 3 -
- 1 5 -
- - - -
3、2*3炮弹,攻击有数字的部分,装甲值为11
0 1 3 -
1 1 5 -
- - - -
可以证明,火力小于12时,无法造成3种不同的假摔方式,所以ENE的火力至少应为12。

Input

第一行,五个数n, m, xmin, ymin, k,空格分隔。
接下来n行,每行m个数,空格分隔,表示P01的装甲。
1<=n,m<=1000,1<=xmin<=n, 1<=ymin<=m, 1<=k<=250000,装甲值为不超过2000的非负整数。
保证火力为无穷大的ENE可以造成k种不同的假摔方式。

Output

仅一行,一个数,表示ENE的火力最低值。
可以转化为用类似dijkstra求最短路的方法求出离起点最近的k个点,即先把最小的符合要求的矩形(x1,y1,x2,y2)放入堆中,每次出堆时扩展出比其长/宽多1且未入堆的矩形(x1,y1,x2+1,y2)和(x1,y1,x2,y2+1),第k次出堆的矩形的总和+1即为答案
  1. #include<cstdio>
  2. #include<queue>
  3. const int R=1e7,P=;
  4. char buf[R],*ptr=buf-;
  5. int _(){
  6. int x=,c=*++ptr;
  7. while(c<)c=*++ptr;
  8. while(c>)x=x*+c-,c=*++ptr;
  9. return x;
  10. }
  11. typedef unsigned long long u64;
  12. int n,m,n1,m1,k,ans=;
  13. int s[][];
  14. u64 hs[P];
  15. struct node{
  16. int v,x1,y1,x2,y2;
  17. };
  18. bool operator<(const node&a,const node&b){
  19. return a.v>b.v;
  20. }
  21. std::priority_queue<node>q;
  22. inline void push(int x1,int y1,int x2,int y2){
  23. if(x1<||y1<||x2>n||y2>m)return;
  24. u64 hv=(u64(x1<<|y1)<<|x2)<<|y2;
  25. int w=hv%P;
  26. while(hs[w]){
  27. if(hs[w]==hv)return;
  28. if((w+=)>=P)w-=P;
  29. }
  30. hs[w]=hv;
  31. int v=s[x1][y1]+s[x2][y2]-s[x1][y2]-s[x2][y1];
  32. q.push((node){v,x1,y1,x2,y2});
  33. }
  34. int main(){
  35. fread(buf,,R,stdin);
  36. n=_();m=_();n1=_();m1=_();k=_();
  37. for(int i=;i<=n;++i){
  38. for(int j=;j<=m;++j)s[i][j]=_()+s[i][j-];
  39. for(int j=;j<=m;++j)s[i][j]+=s[i-][j];
  40. }
  41. for(int i=n1;i<=n;++i){
  42. for(int j=m1;j<=m;++j){
  43. push(i-n1,j-m1,i,j);
  44. }
  45. }
  46. while(k--){
  47. node w=q.top();q.pop();
  48. ans=w.v;
  49. push(w.x1,w.y1,w.x2+,w.y2);
  50. push(w.x1,w.y1,w.x2,w.y2+);
  51. }
  52. printf("%d",ans+);
  53. return ;
  54. }

bzoj4716 假摔的更多相关文章

  1. bzoj4716假摔

    bzoj4716假摔 题意: 给出一个矩阵,求这个矩阵中权值和第k小的长在xmin到n之间,宽在ymin到m之间的子矩阵.n,m≤1000,k≤250000. 题解: 首先求出长为xmin,宽为ymi ...

  2. 【BZOJ4716】假摔 二分+暴力

    [BZOJ4716]假摔 Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名dalao. ...

  3. 轮滑基础(一)(前摔,葫芦步,推步,A字转弯,弓步转弯)

    轮滑新手入门推荐? [柚子陪你学轮滑轮滑教学]第一集 轮滑安全 1,站: 站立:脚可以成v字,或者平行,手放膝盖或者前伸.平行站立 膝盖相距一拳头左右,两腿间距略小于肩宽.膝盖略弯,腰下压,抬头挺胸 ...

  4. fzu月赛 2203 单纵大法好 二分

    Accept: 8    Submit: 18Time Limit: 5000 mSec    Memory Limit : 65536 KB  Problem Description 人在做,天在看 ...

  5. CSS样式的特点与优先选择权

    CSS样式的特点:(子元素会继承父元素的某些样式,子元素有自己的样式就用自己的样式,没有的就用父元素的)      1.继承:              网页中子元素,将继承父元素的样式(比如要控制p ...

  6. CSS文字控制与文本控制

    一.CSS控制文字属性: 1.font-size:18px;:设置字号(默认是16px=1em),一般在制作网页的时候,先在body里同一设置下字体大小2.color:#093:设置字色3.font- ...

  7. CSS选择符类型

    一.标签选择符:针对某一类标签,可以以标签作为选择符 <style type="text/css"> p{color:#F00; font-size:36px;} &l ...

  8. CSS_简介/语法结构/长度单位/应用方式/标签的样式重置/表单样式重置

    一.CSS简介:  w3c(World Wide Web Consortium):万维网联盟,是规定网页标准的一个组织(叫做Web标准) Web标准:是由w3c和其他标准化组织制定的一系列标准的集合, ...

  9. HTML+CSS D08浮动

    1. <html> <head> <title>div浮动</title> <style type="text/css"> ...

随机推荐

  1. 设计模式 : Template method 模板方法模式 -- 行为型

      设计模式中,模板模式面向的是方法级别的流程.(不过好像世界上大部分问题,都可以抽象点.抽象点吧,最后抽象到一个方法里面吧.) 1. 一个方法,可以用来描述一个流程,这个流程涉及多个环节,不同环节可 ...

  2. Codeforces Round #301 (Div. 2) B. School Marks

    其实是很水的一道bfs题,昨晚比赛的时候没看清题意,漏了一个条件. #include<cstdio> #include<cstring> #include<iostrea ...

  3. HS光流算法详解<转载>

    HS 光流法详解 前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像 ...

  4. 【转】beancopy的替代方案

    链接:http://jingyan.baidu.com/article/215817f7d55b871edb14235b.html 最近在项目中接触到了BeanUtils.copyProperties ...

  5. oracle锁机制

    1 前言 数据库大并发操作要考虑死锁和锁的性能问题.看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据 库执行请求,T2代表另一个请求,也可以理解为T1为 ...

  6. Codeforces Round #137 (Div. 2)

    A. Shooshuns and Sequence 显然\([k,n]\)之间所有数均要相同,为了求最少步数,即最多模拟\(n\)次操作即可. B. Cosmic Tables 映射\(x_i,y_i ...

  7. PHP字符串

    <?php $string1 = <<<EVILXR 我有一只小毛驴,我从来也不骑. 有一天我心血来潮,骑着去赶集. 我手里拿着小皮鞭,我心里正得意. 不知怎么哗啦啦啦啦,我摔 ...

  8. Analyzing The Papers Behind Facebook's Computer Vision Approach

    Analyzing The Papers Behind Facebook's Computer Vision Approach Introduction You know that company c ...

  9. ps互补色

    色彩中的互补色有红色与绿色互补,蓝色与橙色互补,紫色与黄色互补.在光学中指两种色光以适当的比例混合而能产生白光时,则这两种颜色就称为“互为补色”. 互补色是相对的混合的白色 互补色:在色环中某种颜色的 ...

  10. android向web提交参数的4种方式总结,附带网站案例源码

    第一种:基于http协议通过get方式提交参数 1.对多个参数的封装 public static String get_save(String name, String phone) { /** * ...