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的火力最低值。

Solution

好长好长的题面啊……

枚举所有的符合大小要求的最小的矩阵,塞进堆里。
每次取出最小的那个,然后向多一行或者多一列拓展。

(运算中用了PQ和map,“<”的问题坑死了= =)
(还被卡常了QAQ……进队和出队时判重运算量的期望有差异的)

#include<stdio.h>
#include<map>
#include<queue>
#define N 1005using namespace std;int n,m,mx,my,k,s[N][N];struct matrix
{int a,b,c,d;inline int size(){return s[c][d]-s[c][b-1]-s[a-1][d]+s[a-1][b-1];}friend bool operator < (matrix a,matrix b){if(a.size()!=b.size()) return b.size()<a.size();if(a.a!=b.a) return a.a<b.a;if(a.b!=b.b) return a.b<b.b;if(a.c!=b.c) return a.c<b.c;if(a.d!=b.d) return a.d<b.d;return 0;}
}A;map<matrix,bool> Map;priority_queue<matrix> Q;int main()
{scanf("%d%d%d%d%d",&n,&m,&mx,&my,&k);for (int i=1;i<=n;i++) for (int j=1;j<=m;j++){scanf("%d",&s[i][j]);s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];}for (int i=1;i+mx-1<=n;i++) for (int j=1;j+my-1<=m;j++) Q.push((matrix){i,j,i+mx-1,j+my-1});while (k--){A=Q.top();Q.pop();if (Map[A]){k++;continue;}Map[A]=1;if (A.c<n) Q.push((matrix){A.a,A.b,A.c+1,A.d});if (A.d<m) Q.push((matrix){A.a,A.b,A.c,A.d+1});}printf("%d",A.size()+1);
}

【BZOJ】4716 假摔相关推荐

  1. BZOJ 4716 假摔

    我们发现我们可以对每一个点维护其还没有用过的矩形中最小的几个,记得判重. #pragma GCC optimize("-O2") #include<bits/stdc++.h ...

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

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

  3. bzoj4716假摔

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

  4. BZOJ4716 假摔

    标签:STL,贪心 题目 题目传送门 假摔(flopping.pas/c/cpp/in/out) [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指 ...

  5. bzoj4716: 假摔

    BZOJ4716: 假摔 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 10  Solved: 7 [Submit][Status][Discuss ...

  6. 银行系统日终结算要多久_美股顽强翻红!两连跌终结,联储降息预期已超九成!制造业疲软消费者信心坚挺,三大股指又假摔?...

    美国股市昨日先抑后扬终结两连跌,开启反弹,道指.标普.纳指纷纷翻红. 10月3日晚,美东时间周四,美股集体低开,盘初受宏观经济数据不及预期影响,三大指数大幅跳水跌逾1%,道指跌超300点.此后美股开启 ...

  7. 练习假摔(视频, 超搞笑)

    [align=center][flash=420,380]http://v.9you.com/player/go1dk9nru[/flash][/align]

  8. 深富策略:假摔洗盘、不必紧张

    11月12日消息,三大指数集体高开,沪指早间窄幅震荡,创业板指小幅冲高后持续回落.板块方面,农业.军工股大幅拉升,电子烟.光伏.储能板块走强,电力设备.机场航运.半导体.汽车零部件等板块活跃:昨日大涨 ...

  9. 2019.10.8 多校赛Day1【including 流量,个人练习生,假摔

    初见安~由于题目不能外传所以请走传送门QuQ:https://www.cnblogs.com/YingLi/protected/p/11650044.html

最新文章

  1. Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题
  2. 软件工程——结对编程第一次作业
  3. 手机键鼠映射软件_吃鸡,我最专业!---盖世小鸡键鼠吃鸡套装评测
  4. Ceph的客户端安装
  5. 特斯拉Model Y发布,售价3.9万美元起,马斯克:年底实现全自动驾驶
  6. Spark on YARN 两种模式yarn-cluster yarn-client 面试题
  7. 怎么做视频伪原创 快手视频修改md5
  8. matlab:代码输出矢量图
  9. android自动画廊,Android3D画廊效果与自动轮播Banner
  10. 二、简单易用的Python代码加密方法(基于Cython)
  11. python中day_python day02
  12. HackTheBox::Blunder
  13. win10计算机管理中没有本地用户和组怎么办
  14. 《学Unity的猫》——第十章:Unity的物理碰撞,流浪喵星计划
  15. android surface 旋转屏幕,[Android/安卓]屏幕旋转时改变SurfaceView(视频)宽高
  16. python爬取 XKCD 中文站,包含多线程
  17. 你问我答:小匠,如何像你一样,做一个订阅号挣它 100 W?
  18. mysql 实现日期格式化(date_format)
  19. 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)
  20. 枚举类型的理解和应用

热门文章

  1. VS CODE 很强大
  2. jmeter教程(十五):远程执行
  3. 修改element弹出框title样式
  4. iOS 设置表格的背景为透明
  5. 概念整理ia32/x86/amd64/ia64/arm64
  6. Java内省用法_java内省机制及PropertyUtils使用方法
  7. IECapt、CutyCapt 生成网页快照
  8. vue elementui下载文件和使用vue-pdf展示pdf文件
  9. 如何在C++中方便的将float、int等类型数据转换成string类型,并利用ROS中的std_msg/String发布出去
  10. webpack创建react项目