[BZOJ 3477] [Usaco2014 Mar Gold] Sabotage
2014-10-28 13:20
441 查看
金组的神题喵。。
[题目描述]
给你N个数,第一个和最后一个不能去掉。
现希望去掉中间某段连续的数,使得剩下的数的平均值最小化。
之前已经做了很久,一直想不到正解。。然后去网上查,发现没有。。
又去USACO上看官方题解,发现看不懂喵。。
然后很绝望地问了杜教。。
结果杜教很鄙视地只回了一句话。。
然后我就很不知天高地厚地D了杜教
后来杜教再很无奈地
哎。。。。。
妈蛋自己之前只想着二分长度什么的。。没想到二分答案
哎自己这么弱连杜教都拯救不了自己。。
这么弱搞什么OI。。
那么接下来给出一个正式的题解。。
二分答案,然后对于每一个Ai-=c
对这个序列的第2项到第n-1项求最长字串。。
设这个值是max,那么可以得到 max+x(即前面的那一段的和)+y(即后面的那一段和)=all-c*n,all是原数列和
x+y=all-ans*n-max
如果x+y<=0,那么这个c就是合法的。。
完毕。。
[反思]
其实之前想的和这个很相近,只是没有往二分上想。。
知识运用不够灵活。。
而且之前推到出来的公式和上面的差不多,就想着怎么让x+y最小,,就想出了很多神奇搞法。。
Code:
[题目描述]
给你N个数,第一个和最后一个不能去掉。
现希望去掉中间某段连续的数,使得剩下的数的平均值最小化。
之前已经做了很久,一直想不到正解。。然后去网上查,发现没有。。
又去USACO上看官方题解,发现看不懂喵。。
然后很绝望地问了杜教。。
结果杜教很鄙视地只回了一句话。。
然后我就很不知天高地厚地D了杜教
后来杜教再很无奈地
哎。。。。。
妈蛋自己之前只想着二分长度什么的。。没想到二分答案
哎自己这么弱连杜教都拯救不了自己。。
这么弱搞什么OI。。
那么接下来给出一个正式的题解。。
二分答案,然后对于每一个Ai-=c
对这个序列的第2项到第n-1项求最长字串。。
设这个值是max,那么可以得到 max+x(即前面的那一段的和)+y(即后面的那一段和)=all-c*n,all是原数列和
x+y=all-ans*n-max
如果x+y<=0,那么这个c就是合法的。。
完毕。。
[反思]
其实之前想的和这个很相近,只是没有往二分上想。。
知识运用不够灵活。。
而且之前推到出来的公式和上面的差不多,就想着怎么让x+y最小,,就想出了很多神奇搞法。。
Code:
const shuru='sabota.in'; shuchu='sabota.out'; maxn=100000; INF=1 shl 25; var a:array[0..maxn] of longint; b:array[0..maxn] of extended; step,all,i,j,k,n:longint; mid,p,data,ans,left,right:extended; function big(a,b:longint):longint; begin if a>b then exit(a); exit(b); end; procedure init; begin readln(n); for i:=1 to n do begin readln(a[i]); inc(all,a[i]); step:=big(step,a[i]); end; end; function max(a,b:extended):extended; begin if a>b then exit(a); exit(b); end; function min(a,b:extended):extended; begin if a<b then exit(a); exit(b); end; function gotmax:extended; var i:longint; ans:extended; begin gotmax:=0;ans:=-INF; for i:=2 to n-1 do begin gotmax:=gotmax+b[i]; ans:=max(ans,gotmax); if gotmax<0 then gotmax:=0; end; exit(ans); end; procedure main; begin init; left:=0;right:=step;ans:=INF; repeat mid:=(left+right)/2; for i:=1 to n do b[i]:=a[i]-mid; data:=gotmax; p:=all-mid*n-data; if p<=0 then begin right:=mid-0.0000001; ans:=min(ans,mid); end else left:=mid+0.0000001; until right-left<0.00001; if ans=INF then writeln(2.000:0:3) else writeln(Ans:0:3); end; begin main; end.
相关文章推荐
- BZOJ 3477: [Usaco2014 Mar]Sabotage( 二分答案 )
- 【bzoj】3477: [Usaco2014 Mar]Sabotage 01分数规划
- bzoj 3477: [Usaco2014 Mar]Sabotage(二分)
- bzoj 3477: [Usaco2014 Mar]Sabotage luogu 【P2115】 [USACO14MAR]破坏Sabotage(二分)
- BZOJ_3477_[Usaco2014 Mar]Sabotage_二分答案
- bzoj3477[Usaco2014 Mar]Sabotage
- [bzoj3477][Usaco2014 Mar][二分]Sabotage
- BZOJ1585 USACO 2009 Mar Gold 3.Earthquake Damage 2
- bzoj3893【Usaco2014 Dec】Cow Jog
- BZOJ3538: [Usaco2014 Open]Dueling GPS Spfa 水
- bzoj3824[Usaco2014 Dec]Guard Mark 奶牛叠罗汉(II)
- BZOJ 3538: [Usaco2014 Open]Dueling GPS
- [BZOJ3445][Usaco2014 Feb] Roadblock(spfa)
- bzoj3540【Usaco2014 Open】Fair Photography
- 【bzoj 3477】Sabotage(二分)
- BZOJ 3476: [Usaco2014 Mar]The Lazy Cow
- 【BZOJ】3479: [Usaco2014 Mar]Watering the Fields(kruskal)
- BZOJ 3892 [Usaco2014 Dec]Marathon 动态规划
- bzoj 3826: [Usaco2014 Dec]Cow Jog LIS
- bzoj3445[Usaco2014 Feb] Roadblock 最短路(记录路径)