XYLX 10.14 (洛谷U1405) problems
2015-10-14 20:23
155 查看
XYLX 10.14 (洛谷U1405) problems
题目描述
OI教练BG在n天中每天早晨会给wxjlzbcd发一套题,其中包含A_i道题目。如果不做的话,题目会累加到下一天。wxjlzbcd每天能够刷掉的题目数量为B_i,BG的题目数量太少,可能不能满足wxjlzbcd每天刷题的需求,如果题目数量不够,wxjlzbcd当天就不会刷题,因为空出来的时间他有可能会浪费掉。
但是wxjlzbcd不想天天颓废,他想知道自己最多能有多少天有题刷。
输入输出格式 Input/output
输入格式:
输入第1行为一个整数n,表示天数。第2行包括n个数字A_i,表示BG n天中每天发的题目数A_i。
第3行包括n个数字B_i,表示wxjlzbcd n天中每天能刷掉的题目数B_i。
输出格式:
输出第1行为一个整数ans,表示天数。输入输出样例 Sample input/output
样例测试点#1输入样例:
51 4 1 2 3
1 2 3 4 5
输出样例:
4分析
该题为为贪心题目。因为当某一天不够题刷时从前面找一天需求量比其大的把题分给其更好。因为如果今天后没办法刷题,那么刷题天数不变,一天换一天,但当后面还能刷题时显然刷今天更好,因为剩下的题目可以给后面继续刷,这样刷的天数必然增加,由此可以得出该贪心策略正确。
这样我们就可以以贪心来做该题
如果该天能够刷题,那就刷题,如果今天不能刷,那么就去找花费最大一天把它替换掉。
最大值用大根堆维护
代码如下
program p1766; var n,m:longint; mid,i,j,v,l,r:longint; volume:array[1..1000000] of longint; function judge(v:longint):boolean; var i,now,sum:longint; begin sum:=1; now:=v; i:=1; while i<=n do begin now:=now-volume[i]; if now<0 then begin now:=v; now:=now-volume[i]; if now>=0 then inc(sum) else exit(false); end; i:=i+1; end; if sum<=m then exit(true); exit(false); end; begin readln(n,m); v:=0; for i:=1 to n do begin read(volume[i]); v:=v+volume[i]; end; l:=1; r:=v; while l<r do begin mid:=(l+r)>>1; if judge(mid) then begin r:=mid end else begin l:=mid+1; end; end; write(l); end.
….╮(╯▽╰)╭
再别康桥
轻轻的我走了,正如我轻轻的来;
我轻轻的招手,
作别西天的云彩。
那河畔的金柳,
是夕阳中的新娘;
波光里的艳影,
在我的心头荡漾。
软泥上的青荇⑴,
油油的在水底招摇⑵;
在康河的柔波里,
甘心做一条水草!
那榆荫下的一潭,
不是清泉,是天上虹;
揉碎在浮藻间,
沉淀着彩虹似的梦。
寻梦?撑一支长篙⑶,
向青草更青处漫溯⑷;
满载一船星辉,
在星辉斑斓里放歌。
但我不能放歌,
悄悄是别离的笙箫;
夏虫也为我沉默,
沉默是今晚的康桥!
悄悄的我走了,
正如我悄悄的来;
我挥一挥衣袖,
不带走一片云彩。
⑴青荇(xìng):多年生草本植物,叶子略呈圆形,浮在水面,根生在水底,花黄色。
⑵招摇:这里有“逍遥”之意。
⑶篙(gāo):用竹竿或杉木等制成的撑船工具。
⑷溯(sù):逆着水流的方向走。