bzoj4716假摔

题意:

给出一个矩阵,求这个矩阵中权值和第k小的长在xmin到n之间,宽在ymin到m之间的子矩阵。n,m≤1000,k≤250000。

题解:

首先求出长为xmin,宽为ymin的子矩阵放入优先队列,每次取出时如果该矩阵之前没有出现过(用set判重),则将其扩展并放入优先队列,输出第k个不重复的(这里指位置不重复的,权值可以相等)。

代码:

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <set>
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define maxn 1010
using namespace std; inline int read(){
char ch=getchar(); int f=,x=;
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return f*x;
}
int sum[maxn][maxn],n,m,xmin,ymin,k,tot;
struct nd{
int x,y,l,c,v;
bool operator < (const nd &a)const{
if(v!=a.v)return v>a.v; if(x!=a.x)return x<a.x; if(y!=a.y)return y<a.y;
if(l!=a.l)return l<a.l; return c<a.c;
};
};
priority_queue<nd>q; set<nd>st;
int main(){
n=read(); m=read(); xmin=read(); ymin=read(); k=read();
inc(i,,n)inc(j,,m){int x=read(); sum[i][j]=sum[i-][j]-sum[i-][j-]+sum[i][j-]+x;}
inc(i,,n-xmin+)inc(j,,m-ymin+){
q.push((nd){i,j,xmin,ymin,sum[i+xmin-][j+ymin-]-sum[i+xmin-][j-]-sum[i-][j+ymin-]+sum[i-][j-]});
}
while(!q.empty()){
nd x=q.top(); q.pop(); if(st.find(x)!=st.end())continue;
tot++; if(tot==k){printf("%d",x.v+); break;} st.insert(x);
if(x.x+x.l<=n)
q.push((nd){x.x,x.y,x.l+,x.c,sum[x.x+x.l][x.y+x.c-]-sum[x.x+x.l][x.y-]-sum[x.x-][x.y+x.c-]+sum[x.x-][x.y-]});
if(x.y+x.c<=m)
q.push((nd){x.x,x.y,x.l,x.c+,sum[x.x+x.l-][x.y+x.c]-sum[x.x+x.l-][x.y-]-sum[x.x-][x.y+x.c]+sum[x.x-][x.y-]});
if(x.x+x.l<=n&&x.y+x.c<=m)
q.push((nd){x.x,x.y,x.l+,x.c+,sum[x.x+x.l][x.y+x.c]-sum[x.x+x.l][x.y-]-sum[x.x-][x.y+x.c]+sum[x.x-][x.y-]});
}
return ;
}

20161110

bzoj4716假摔的更多相关文章

  1. bzoj4716 假摔

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

  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. springboot整合oss

    原文链接:https://blog.csdn.net/weixin_42370891/article/details/99102508 登录阿里云,进入到控制台 创建Bucket 导入如下依赖 < ...

  2. Arduino控制超声波检测与0.96OLED及串口显示

    Arduino控制超声波检测与0.96OLED及串口显示代码使用库共享(包括超声波检测与U8glib): 使用元件: 0.96寸 12864 I2C OLED 128x64规格 超声波检测模块 湿度模 ...

  3. 记linux vsftpd配置遇到的错误

    环境:centos 7 yum安装 yum install -y vsftpd 增加用户 # 家目录为/www 并设置nologin useradd -d /www -s /sbin/nologin ...

  4. arduino连接1602LCD方法

    arduino连接1602LCD方法 参考代码:

  5. Javascript数组迭代精髓,拿去花

    数组迭代 数组迭代是处理各数组的利器,编写代码时常常会用到,为我们提供了大大的便利.如果还不知道,真的别告诉别人你知道js哈哈. 以下迭代方法均不会改变原数组,带*为必选对象. 1.arr.forEa ...

  6. LeetCode 79,这道走迷宫问题为什么不能用宽搜呢?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第48篇文章,我们一起来看看LeetCode当中的第79题,搜索单词(Word Search). 这一题官方给的难 ...

  7. typora中的图片处理20200622

    typora中的图片处理20200622 食用建议 typora作为markdown的书写神器,一般习惯的流程是在typora中写完,然后复制粘贴到博客园中,然而,markdown中图片采用的是本地连 ...

  8. C# CLosedXML四句代码搞定DataTable数据导出到Excel

    最近用到DataTable导出到Excel,网上看了一下,都不怎么好使,逛了下GitHub一下完美解决了 用到的.net库CLosedXML,这个库用于读取,处理和写入Excel 2007+(.xls ...

  9. SpringBoot--数据库管理与迁移(LiquiBase)

    随着开发时间积累,一个项目会越来越大,同时表结构也越来越多,管理起来比较复杂,特别是当想要把一个答的项目拆分成多个小项目时,表结构拆分会耗很大的精力:如果使用LiquiBase对数据库进行管理,那么就 ...

  10. git和github入门指南(5)

    5.github上的标签 5.1.标签的作用 给当前版本打一个标签,在github上就会形成一个releases版本 点击进去后,用户就可以下载对应版本的源代码 5.2.在本地git工具上创建标签,同 ...