bzoj4716假摔
bzoj4716假摔
题意:
给出一个矩阵,求这个矩阵中权值和第k小的长在xmin到n之间,宽在ymin到m之间的子矩阵。n,m≤1000,k≤250000。
题解:
首先求出长为xmin,宽为ymin的子矩阵放入优先队列,每次取出时如果该矩阵之前没有出现过(用set判重),则将其扩展并放入优先队列,输出第k个不重复的(这里指位置不重复的,权值可以相等)。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <queue> 5 #include <set> 6 #define inc(i,j,k) for(int i=j;i<=k;i++) 7 #define maxn 1010 8 using namespace std; 9 10 inline int read(){ 11 char ch=getchar(); int f=1,x=0; 12 while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();} 13 while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); 14 return f*x; 15 } 16 int sum[maxn][maxn],n,m,xmin,ymin,k,tot; 17 struct nd{ 18 int x,y,l,c,v; 19 bool operator < (const nd &a)const{ 20 if(v!=a.v)return v>a.v; if(x!=a.x)return x<a.x; if(y!=a.y)return y<a.y; 21 if(l!=a.l)return l<a.l; return c<a.c; 22 }; 23 }; 24 priority_queue<nd>q; set<nd>st; 25 int main(){ 26 n=read(); m=read(); xmin=read(); ymin=read(); k=read(); 27 inc(i,1,n)inc(j,1,m){int x=read(); sum[i][j]=sum[i-1][j]-sum[i-1][j-1]+sum[i][j-1]+x;} 28 inc(i,1,n-xmin+1)inc(j,1,m-ymin+1){ 29 q.push((nd){i,j,xmin,ymin,sum[i+xmin-1][j+ymin-1]-sum[i+xmin-1][j-1]-sum[i-1][j+ymin-1]+sum[i-1][j-1]}); 30 } 31 while(!q.empty()){ 32 nd x=q.top(); q.pop(); if(st.find(x)!=st.end())continue; 33 tot++; if(tot==k){printf("%d",x.v+1); break;} st.insert(x); 34 if(x.x+x.l<=n) 35 q.push((nd){x.x,x.y,x.l+1,x.c,sum[x.x+x.l][x.y+x.c-1]-sum[x.x+x.l][x.y-1]-sum[x.x-1][x.y+x.c-1]+sum[x.x-1][x.y-1]}); 36 if(x.y+x.c<=m) 37 q.push((nd){x.x,x.y,x.l,x.c+1,sum[x.x+x.l-1][x.y+x.c]-sum[x.x+x.l-1][x.y-1]-sum[x.x-1][x.y+x.c]+sum[x.x-1][x.y-1]}); 38 if(x.x+x.l<=n&&x.y+x.c<=m) 39 q.push((nd){x.x,x.y,x.l+1,x.c+1,sum[x.x+x.l][x.y+x.c]-sum[x.x+x.l][x.y-1]-sum[x.x-1][x.y+x.c]+sum[x.x-1][x.y-1]}); 40 } 41 return 0; 42 }
20161110
转载于:https://www.cnblogs.com/YuanZiming/p/6055426.html
bzoj4716假摔相关推荐
- bzoj4716: 假摔
BZOJ4716: 假摔 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 10 Solved: 7 [Submit][Status][Discuss ...
- BZOJ4716 假摔
标签:STL,贪心 题目 题目传送门 假摔(flopping.pas/c/cpp/in/out) [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指 ...
- 【BZOJ4716】假摔 二分+暴力
[BZOJ4716]假摔 Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名dalao. ...
- 【BZOJ】4716 假摔
Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名dalao.在游戏关卡的攻略中,可能由 ...
- 银行系统日终结算要多久_美股顽强翻红!两连跌终结,联储降息预期已超九成!制造业疲软消费者信心坚挺,三大股指又假摔?...
美国股市昨日先抑后扬终结两连跌,开启反弹,道指.标普.纳指纷纷翻红. 10月3日晚,美东时间周四,美股集体低开,盘初受宏观经济数据不及预期影响,三大指数大幅跳水跌逾1%,道指跌超300点.此后美股开启 ...
- 练习假摔(视频, 超搞笑)
[align=center][flash=420,380]http://v.9you.com/player/go1dk9nru[/flash][/align]
- BZOJ 4716 假摔
我们发现我们可以对每一个点维护其还没有用过的矩形中最小的几个,记得判重. #pragma GCC optimize("-O2") #include<bits/stdc++.h ...
- 深富策略:假摔洗盘、不必紧张
11月12日消息,三大指数集体高开,沪指早间窄幅震荡,创业板指小幅冲高后持续回落.板块方面,农业.军工股大幅拉升,电子烟.光伏.储能板块走强,电力设备.机场航运.半导体.汽车零部件等板块活跃:昨日大涨 ...
- 2019.10.8 多校赛Day1【including 流量,个人练习生,假摔
初见安~由于题目不能外传所以请走传送门QuQ:https://www.cnblogs.com/YingLi/protected/p/11650044.html
最新文章
- Java虚拟机中 类的加载过程
- 北斗卫星现在什么情况?这些数据不能不看
- 线程间到底共享了哪些进程资源
- HIVE 查询显示列名 及 行转列显示
- Browser控制台分析
- 石子归并 51Nod - 1021
- 左耳朵耗子:不灌鸡汤,说真的年龄渐长,技术人的发展之路该怎么走
- 多智能体连续行为空间问题求解——MADDPG
- Win7系统浏览器的兼容模式如何设置
- Java继承 implements 与 extends 总结
- truncate delete 与 drop的区别
- 2015计算机二级c语言题库,2015年计算机二级C语言题库找题目录
- jsp 文件使用 include指令 导入 jspf 分析,及导入jspf 文件后出现乱码问题
- Web应用程序的开发方法
- java处理paypal支付
- matlab中证券组合的收益,【证券投资组合分析】基于MATLAB的证券投资组合分析_玛雅作文网...
- 用python自动制作ppt——第三讲——插入文本框
- web 系统发展历程
- CORS手机测试软件,司南导航RTK手簿软件测量大师连接千寻cors账号进行测量的方法教程...
- 用matlab做一个有刻度的网格,MATLAB已知坐标如何画网格图
热门文章
- 新版标准日本语中级_第二十八课
- 为什么要用企业邮箱?企业邮箱能给公司带来哪些好处?
- JVM(三)--垃圾收集算法
- 华为开源的深度学习框架 MindSpore
- 计算机 发声原理,模拟电子琴演奏程序设计。微机中扬声器控制发声原理如练习图10.1所示,其中用到8255与8253两个芯片。...
- 微信小程序和用网易新闻api实现自己的微信小程序
- HadoopHbaseZookeeper集群
- 微型计算机的性能指标
- 自制合成孔径雷达(10) 声波和无线电测向
- Swift基础入门知识学习(12)-枚举(列举)-讲给你懂