洛谷 P4754 True Vegetable 解题报告
P4754 True Vegetable
题目描述
小A现在有N道题,编号为1,2,⋯,N。每道题的起始毒瘤程度为0或1。在每天,小A可以将编号连续的K道题的毒瘤程度+1。但小B因为本身比较菜,不是很愿意小A出毒瘤题,所以在\(w_i\)天开始时可以向第\(x_i\)题传播\(v_i\)点的菜气,使得第\(x_i\)的毒瘤程度减少\(v_i\)点(减后可以为负)。这里我们假定菜是有限的,在释放了\(v_i\)点的菜气后,小B需要至少$ r_{v_i}$个回合不能释放菜气。现在小A知道了小B释放菜气的计划,他想知道他至少需要多少个回合可以使得每道题的毒瘤程度至少为1。
输入输出格式
输入格式:
第一行输入四个整数,N,M,K,L,分别为题目的数量,小B的操作数量,每次连续增加毒瘤程度题目的数量和释放菜气的最大值。
第二行输入N个整数\(a_1,a_2,\cdots,a_N\),分别为N个题目的毒瘤程度。
第三行输入L个整数\(r_1,r_2,\cdots,r_L\),分别为释放1到L点菜气的冷却回合数。
接下来有M行,每行输入三个整数\(w_i,x_i,v_i\),表示小B在第\(w_i\)次回合开始时向第\(x_i\)题释放了\(v_i\)点的菜气。保证\(\{w_i\}\)为递增序列。
输出格式:
请输出小A将每道题的毒瘤程度加到至少为1最少需要的回合数。
说明
\(1≤N,M≤5×10^5\)
\(1 \le K \le N\)
\(1 \le L \le 100\)
\(a[i] \in \{0,1\}\)
\(1 = r_1 < r_2 < \cdots < r_L \le 2 \times L\)
\(1 \le w_i \le N+L\)
\(w_i+r_{v_i} \le w_{i+1}\)
\(1 \le x_i \le N\)
\(1 \le v_i \le L\)
我做的第一道的一道二分答案+贪心的题是一个叫丢瓶盖的,其实和这个题差不多。
但是这个题明显坑很多。。
月赛的时候,我们机房一直在吵关于B的决策的问题,从期望争到博弈。
然而第二天早上
我们发现了\(w_i+r_{v_i} \le w_{i+1}\)
要你这冷却时间有何用???
冷静下来以后发现真的有用,只是读入后不需要处理而已。
因为还有一条\(1 = r_1 < r_2 < \cdots < r_L \le 2 \times L\),这个保证了二分的正确性。
我们二分B做到哪一个计划了,由于以上一个条件,我们可以确定如果B这个计划时A目的达成了,在之后A的计划一定可以达成,而如果这时A的计划没有达成,那么之前也没法达成。
在二分检查的时候,先让B把招数放了,然后我们对A的题目编号从小到大扫描,如果当前毒瘤值小于1,花时间给它加上,用一个外部的差分数组维护偏移量。
每次的总时间为B下一个招数的时间-1
Code:
#include <cstdio>
#include <cstring>
const int N=500010;
int min(int x,int y){return x<y?x:y;}
int n,m,k,L,ans;
//题目的数量,小B的操作,每次连续增加毒瘤程度题目的数量和释放菜气的最大值
int s[N],tmp[N];//毒瘤值
int d[N],add;//外界差分数组
int w[N],x[N],v[N];//w天对x题放了v的菜气
bool check(int c)
{
memset(d,0,sizeof(d));
add=0;
for(int i=1;i<=n;i++)
tmp[i]=s[i];
for(int i=1;i<=c;i++)
tmp[x[i]]-=v[i];
int cnt=w[c+1]-1;
for(int i=1;i<=n;i++)
{
add+=d[i];
tmp[i]+=add;
if(tmp[i]<1)
{
add+=1-tmp[i];
d[min(i+k,n+1)]-=1-tmp[i];
cnt-=1-tmp[i];
if(cnt<0) return false;
}
}
ans=w[c+1]-1-cnt;
return true;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&k,&L);
for(int i=1;i<=n;i++)
scanf("%d",s+i);
for(int i=1;i<=L;i++)
scanf("%d",s);
for(int i=1;i<=m;i++)
scanf("%d%d%d",w+i,x+i,v+i);
w[m+1]=w[m]+N;
int l=0,r=m;
while(l<r)
{
int mid=l+r>>1;
if(check(mid))
r=mid;
else
l=mid+1;
}
check(l);
printf("%d\n",ans);
return 0;
}
2018.7.15
洛谷 P4754 True Vegetable 解题报告的更多相关文章
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷 P2725 邮票 Stamps 解题报告
P2725 邮票 Stamps 题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描 ...
- 洛谷 P3853 路标设置 解题报告
P3853 路标设置 题目背景 B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离.为了便于研究这个问题,我们把公路 ...
- 洛谷 P1054 等价表达式 解题报告
P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- 洛谷 P4171 [JSOI2010]满汉全席 解题报告
P4171 [JSOI2010]满汉全席 题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高 ...
- 洛谷 P3177 树上染色 解题报告
P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...
随机推荐
- [转]50 Tips for Working with Unity (Best Practices)
About these tips These tips are not all applicable to every project. They are based on my experience ...
- 数据库sql优化总结之1-百万级数据库优化方案+案例分析
项目背景 有三张百万级数据表 知识点表(ex_subject_point)9,316条数据 试题表(ex_question_junior)2,159,519条数据 有45个字段 知识点试题关系表(ex ...
- 2.0 flume、sqoop、oozie/Azkaban
在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集.结果数据导出.任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便 ...
- pip安装Crypto注意事项
pip install PyCrypto 1.使用pip install Crypto的方式安装的文件夹名称为crypto,而内部引用都用的Crypto路径,因此pip安装后,需要将文件夹名称修改为C ...
- 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个E ...
- pandas中DataFrame的ix,loc,iloc索引方式的异同
pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...
- 寒假c++学习计划
课程选择 概览 清华大学 C++语言程序设计基础 深入学习 清华大学 C++语言程序设计进阶 (2015年秋) 理由 清华大学郑莉老师的课浅显易懂,很适合我这种小白,再加上学习过c语言理解c++基础并 ...
- 0302IT行业虽吃香,能完全享受这块“香"的也很难
面对现今严峻的就业形势,越来越多的人希望通过职业技能培训或者学历提升来提高自己的综合技能以便能够顺利地应聘到自己理想中的工作. 在2014年十大最热门行业和职业排行榜中IT行业最吃香.在十大行业里,I ...
- [CB] Windows10为什么质量变差 bug越来越多
在 Windows 10 发布之后,微软转向了软件即服务模式,每半年释出一个新版本,通过增加更新频率将新的特性不断推送给用户. 在以前,微软产品发布周期是两到三年,其开发流程分成多个阶段:设计和策划. ...
- RAID卡服务器安装2003教程
这里先讲讲安装系统的几个思路: 1.U盘安装法(U盘只做可启动PE,常用的大白菜,IT天空,老毛桃.....拷贝系统ISO镜像到U盘,进入PE之后找到ISO,用虚拟光驱加载,运行WIN系统安装器 ...