原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1689

一开始想枚举逛街的终点,然后开两个大根堆维护b值,分别保证喜爱店不少于k,以及在此前提下逛到的店尽可能多。具体实现是维持第一个堆元素数为k,每加入一个元素,如果c为1,就丢进第一个堆,并把堆顶丢到第二个,c为0直接丢进第二个。如果两个堆的元素b值之和超过T,就从第二个堆删元素。

但是这种写法最后的删元素部分有可能删去对答案有贡献的点,这时再把丢掉的元素维护起来,每次都差一下,然后就T了。

于是考虑每次删元素都看看第三个堆与第二个堆的优劣,删去无用元素,可以省去很多无用计算。

#include<queue>
#include<cstdio>
#include<algorithm>
#define MN 100001
using namespace std;
int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
int n,m,k,a[MN],b[MN],mmh=-,A;
long long T=;
priority_queue <int> q,Q,S;
int main(){
register int i;
n=read();m=read();k=read();
for (i=;i<=n;i++) a[i]=read();
for (i=;i<=n;i++) b[i]=read();
for (i=;i<=n;i++){
if (read()) if (int(q.size())<k) q.push(b[i]);else
q.push(b[i]),Q.push(q.top()),q.pop();else Q.push(b[i]);
T+=b[i];
if (int(q.size())<k) continue;
while (T+a[i]>m&&(!Q.empty())) T-=Q.top(),S.push(-Q.top()),Q.pop();
while (!S.empty()&&T+a[i]-S.top()<=m) T-=S.top(),Q.push(-S.top()),S.pop();
while (!S.empty()&&-S.top()<Q.top()){
T-=S.top();Q.push(-S.top());S.pop();
while (T+a[i]>m&&(!Q.empty())) T-=Q.top(),S.push(-Q.top()),Q.pop();
}
if (T+a[i]<=m&&k+int(Q.size())>mmh) mmh=k+int(Q.size());
}
printf("%d\n",mmh);
}

LYK喜欢逛街。

但是LYK时间有限,只有T个单位时间。

LYK从1号店出发,从1号店走到第i号店需要花费 ai 个单位的时间,这些店形成了一条直线,因此LYK从i号店到i+1号店花费的时间为 ai+1−ai 。若选择进去逛,则需要需要花费 bi 的时间。对于第i家店,LYK对其有个评估值 ci ,表示自己是否喜欢这家店。

LYK想在有限的时间内,逛无限的街,当然这是不可能的。

它有个目标,将走进去逛的店中 ci 的和加起来,要使得这个值 ≥ k,在此基础上,能逛的店越多越好。

它想知道最多能逛多少店。

若无法满足LYK的要求,输出-1。

Input
第一行三个整数n(1<=n<=100000),T(1<=T<=10^9),k(0<=k<=n)。
接下来一行n个数,表示ai(a1=0,a1<a2<...<an<=10^9)。
接下来一行n个数,表示bi(1<=bi<=10^9)。
接下来一行n个数,表示ci(0<=ci<=1)。
Output
一行表示答案。
Input示例
4 11 1
0 1 2 10
1 1 1 1
0 0 0 1
Output示例
1

51nod:1689 逛街的更多相关文章

  1. 51nod 1689 逛街(优先队列)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1689 题意: 题意: 枚举终点,这样就确定路上的花费,接下来只需要计算进 ...

  2. vijos1891 学姐的逛街计划(线性规划)

    P1891学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, 因为他还要陪 ...

  3. VR全景智慧城市——“海市蜃楼”般的逛街体验

    <史记·天官书>:"海旁蜃气像楼台:广野气成宫阙然." 海市蜃楼,简称蜃景,是一种因为光的折射和全反射而形成的自然现象,是地球上物体反射的光经大气折射而形成的虚像. 2 ...

  4. VR全景智慧城市:开启VR全景逛街新时代~

    VR全景,又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体大的区别是"可操作,可交互". 对于顾客体验来说,VR确实是对于实体店是一种颠覆性的创新,它既 ...

  5. “海市蜃楼”般的逛街体验——VR全景智慧城市常诚

    <史记·天官书>:"海旁蜃气像楼台:广野气成宫阙然." 海市蜃楼,简称蜃景,是一种因为光的折射和全反射而形成的自然现象,是地球上物体反射的光经大气折射而形成的虚像. 2 ...

  6. THUWC逛街记

    1/28 这次打算去THUWC划个水,就定了1/29中午的飞机.同校有几个同学去PKUWC,求稳搭今天的飞机.中午时候听说今天飞长沙的飞机全都取消了,明天有没有也不好说( 事实证明29号有飞机:( ) ...

  7. Vijos1891 学姐的逛街计划 【费用流】*

    Vijos1891 学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课. 偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, ...

  8. 刷题总结——学姐的逛街计划(vijos1891费用流)

    题目: doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, 因为他还要陪学姐去逛街呢. 后来, ...

  9. [vijos1891]学姐的逛街计划

                                                                     学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, d ...

随机推荐

  1. if;脚本中退出语句:exit 数字,用$?查时为exit设置的数字,此数字为程序执行完后的返回数据,可以通过此方法自动设定

    if [ 条件 ];then 代码 fi if [ 条件 ] then 代码 fi [root@localhost ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda5 % ...

  2. iOS UICollectionView(转三)

    上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看<iOS开发之窥探UICollectionViewControlle ...

  3. shell按行读取文件

    这工作小半年了发现以前学的那么多流弊技能都不怎么用,倒是shell用的很多,自己已经从shell小菜鸟一步步走过来,已经要变成大菜鸟=.= 经常需要用shell按行读取配置文件,自己在上面踩了很多坑, ...

  4. bzoj 2753: [SCOI2012]滑雪与时间胶囊

    Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi. ...

  5. StreamCQL编写jstorm拓扑任务入门

    一,什么是 StreamCQL StreamCQL(Stream Continuous Query Language)是一个类似SQL的声明式语言, 目的是在流计算平台(目前也就是jstrom)的基础 ...

  6. nova创建虚拟机源码分析系列之四 nova代码模拟

    在前面的三篇博文中,介绍了restful和SWGI的实现.结合restful和WSGI配置就能够简单的实现nova服务模型的最简单的操作. 如下的内容是借鉴网上博文,因为写的很巧妙,将nova管理虚拟 ...

  7. ln 命令详解

    ln 命令 作用:它的功能是为某一个文件在另外一个位置建立一个同步的链接 参数:必要参数:  -b 删除,覆盖以前建立的链接  -d 允许超级用户制作目录的硬链接  -f 强制执行  -i 交互模式, ...

  8. eslint常见规则总结

    google: eslint+rules es6: impot When you import the module's default, don't use brace {} 意思是,当你使用默认的 ...

  9. Linux(CentOS6.5)修改默认yum源为国内的阿里云、网易yum源

    官方的yum源在国内访问效果不佳. 需要改为国内比较好的阿里云或者网易的yum源 修改方式: echo 备份当前的yum源 mv /etc/yum.repos.d /etc/yum.repos.d.b ...

  10. 无法打开文件“freeglut.lib”解决方法:

    资源: 链接:https://pan.baidu.com/s/1eSctT5K 密码:174s VS2010问题: 无法打开文件"freeglut.lib"解决方法: (1)下载f ...