[PA2014]Muzeum

题目大意:

有\(n\)件展品和\(m\)个警卫,每件展品有一个坐标\((x_i,y_i)\)和价值\(v_i\),每个警卫的坐标为\((x_i,y_i)\)。每个警卫面朝\(y\)轴负方向,左右视角都为\(\theta\),警卫视线范围内的展品不能偷。你可以收买一些警卫,使其放弃安保工作,收买第\(i\)个警卫的价格为\(v_i\)。你需要收买一些警卫并偷走一些展品,求盗取的总价值\(-\)收买的支出的最大值。

思路:

\(\tan(\theta)=\frac wh\),将所有点的\(x_i\)乘上\(h\),\(y_i\)乘上\(w\),再将所有点绕原点顺时针旋转\(45^\circ\),则展品\((u_i,v_i)\)被\((x_i,y_i)\)上的警卫监视,当且仅当\(u_i\le x_i\)且\(v_i\le y_i\)。

将警卫当作“水源”,含\(v_i\)体积的水;展品当作“水桶”,容量为\(v_i\)。答案即为所有“水桶”容量之和\(-\)能被水桶吸收的水的体积。

从左到右枚举每一个警卫,set中以纵坐标为序维护警卫左边的水桶的剩余容量。从高到低枚举不高于警卫所在位置的水桶,并尽可能将水装满即可。

源代码:

#include<set>
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
register bool neg=false;
while(!isdigit(ch=getchar())) neg|=ch=='-';
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return neg?-x:x;
}
typedef long long int64;
const int N=2e5+1;
struct Point {
int64 x,y;
int v;
bool operator < (const Point &rhs) const {
return x==rhs.x?y<rhs.y:x<rhs.x;
}
};
Point a[N],b[N];
std::set<std::pair<int64,int> > set;
int main() {
const int n=getint(),m=getint();
const int w=getint(),h=getint();
int64 ans=0;
for(register int i=1;i<=n;i++) {
const int64 x=1ll*getint()*h,y=1ll*getint()*w;
a[i].x=x+y;
a[i].y=y-x;
a[i].v=getint();
ans+=a[i].v;
}
for(register int i=1;i<=m;i++) {
const int64 x=1ll*getint()*h,y=1ll*getint()*w;
b[i].x=x+y;
b[i].y=y-x;
b[i].v=getint();
}
std::sort(&a[1],&a[n]+1);
std::sort(&b[1],&b[m]+1);
for(register int i=1,j=1;i<=m;i++) {
for(;j<=n&&a[j].x<=b[i].x;j++) {
set.insert(std::make_pair(a[j].y,a[j].v));
}
while(b[i].v) {
std::set<std::pair<int64,int> >::iterator it=set.lower_bound(std::make_pair(b[i].y+1,0));
if(it==set.begin()) break;
std::pair<int64,int> p=*--it;
set.erase(it);
const int tmp=std::min(p.second,b[i].v);
b[i].v-=tmp;
p.second-=tmp;
ans-=tmp;
if(p.second) set.insert(p);
}
}
printf("%lld\n",ans);
return 0;
}

[PA2014]Muzeum的更多相关文章

  1. 【BZOJ3716】[PA2014]Muzeum(贪心,网络流)

    [BZOJ3716][PA2014]Muzeum(贪心,网络流) 题面 BZOJ 题解 很明显可以写最大权闭合子图,然后会\(TLE\)成傻逼. 为了方便,就把一个警卫能够看到的范围处理一下(把坐标系 ...

  2. bzoj3716/4251 [PA2014]Muzeum

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3716 http://www.lydsy.com/JudgeOnline/problem.ph ...

  3. bzoj 3716: [PA2014]Muzeum

    Description 吉丽的漫展有n件手办和m名警卫.建立平面直角坐标系,每个手办和警卫都可以看做一个点.警卫们的目光都朝着y轴负方向,且都有相同大小的视角.警卫可以看见自己视角内(包括边界上的点) ...

  4. 【BZOJ3716】[PA2014]Muzeum(贪心+网络流)

    BZOJ 题意: 在二维网格图中有\(n\)个物品,每个物品有价值:但有\(m\)个警卫看管这些物品,每个警卫面朝\(y\)轴负方向,能看到一定角度(假定能够看到无穷远). 现在每个敬畏有一个贿赂价钱 ...

  5. BZOJ 3716 [PA2014]Muzeum 贪心SET最大闭合子图

    看上去像是一个最大权闭合子图裸题但是数据太大 我们可以先把守卫的视野转换到第二象限(每个守卫可以看到横坐标比他小 纵坐标比他大的宝物) 然后按X从小到大 再按Y从大到小排 这样我们就可以按SORT序遍 ...

  6. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  7. 退役前的最后的做题记录upd:2019.04.04

    考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. BZOJ 3721: PA2014 Final Bazarek

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 645  Solved: 261[Submit][ ...

随机推荐

  1. Python中字符串的截取,列表的截取

    字符串的截取 Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符. 字符串的截取的语法格式如下: 变量[头下标:尾下标] 索引值以 0 为开始值,-1 ...

  2. 制作linux下的.run安装包

    前言 之前往linux上安装一个软件,都是以压缩包或者压缩包+shell的方法,这每次安装,都是先scp到某个目录, 解压,安装......稍微厉害的,会写个shell脚本.但是还是达不到真正的快速方 ...

  3. 将txt文本转换为excel格式

    将txt文本转换为excel格式,中间使用的列分割为 tab 键 一.使用xlwt模块 注:Excel 2003 一个工作表行数限制65536,列数限制256 需要模块:xlwt 模块安装:xlwt ...

  4. 远程桌面管理工具Remote Desktop Connection Manager

    使用说明:RDCMan安装好后双击打开RDCMan.exe,首次使用需要添加配置文件扩展名为rdg 1.点击File新建配置文件,这里命名为MRU,存放在安装的根路径下 建好之后,MRU会显示在左侧菜 ...

  5. [转] 那些在使用webpack时踩过的坑

    用webpack的过程,就是一个不断入坑和出坑的过程.回望来时路,一路都是坑啊!现把曾经趟过的那些坑整理出来,各位看官有福了~ 文章末尾有我用到的依赖的版本信息,若你发现某个问题与我在本文中的描述不一 ...

  6. [转] web前端js构造无法销毁的类UUID识别码,识别浏览器设备唯一性

    用户行为统计在如今的前端生态中已是稀松寻常,如各种站长统计工具.识别用户访问客户端唯一性是必要的实现,对于web前端获取的设备信息,一般容易想到的是通过navigator.userAgent,但相同设 ...

  7. python多线程之t.setDaemon(True) 和 t.join()

    0.目录 1.参考2.结论    (1)通过 t.setDaemon(True) 将子线程设置为守护进程(默认False),主线程代码执行完毕后,python程序退出,无需理会守护子线程的状态.    ...

  8. 【Android】ContentValues的用法

    ContentValues 和HashTable类似都是一种存储的机制 但是两者最大的区别就在于,contenvalues只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西,而 ...

  9. JMeter中BeanShell Sampler调试分享

    BeanShell脚本 String s = "s"; String y = "y"; boolean result = s.equals(y); vars.p ...

  10. 使用element-ui的常见问题

    给组件绑定的事件为什么无法触发?  在 Vue 2.0 中,为自定义组件绑定原生事件必须使用 .native 修饰符: <my-component @click.native="han ...