NC24025. [USACO 2016 Jan G]Angry Cows
描述
输入描述
The first line of input contains N (2≤N≤50,000). The remaining N lines all contain integers x1…xN (each in the range 0…1,000,000,000).
输出描述
Please output the minimum power R with which a cow must be launched in order to detonate all the hay bales. Answers should be rounded and printed to exactly 1 decimal point.
示例1
输入:
5 8 10 3 11 1
输出:
3.0
说明:
In this example, a cow launched with power 3 at, say, location 5, will cause immediate detonation of hay bales at positions 3 and 8. These then explode (simultaneously) each with blast radius 2, engulfing bales at positions 1 and 10, which next explode (simultaneously) with blast radius 1, engulfing the final bale at position 11, which finally explodes with blast radius 0.C++(clang++11) 解法, 执行用时: 17ms, 内存消耗: 892K, 提交时间: 2021-01-02 11:29:54
#include<cstdio> #include<algorithm> using namespace std; int n,ans,a[100000],dp1[100000],dp2[100000]; int main() { scanf("%d",&n); ans=2000000000; for(int i=1;i<=n;i++) scanf("%d",a+i); sort(a+1,a+n+1); int l=1; for(int i=2;i<=n;i++) { while(l<i&&dp1[l]+a[l]+1<a[i]) l++; if(l<i) dp1[i]=dp1[l]+1; else dp1[i]=a[i]-a[i-1]; } int r=n; for(int i=n-1;i>=1;i--) { while(r>i&&-dp2[r]+a[r]-1>a[i]) r--; if(r>i) dp2[i]=dp2[r]+1; else dp2[i]=a[i+1]-a[i]; } l=1,r=n; while(l<r) { ans=min(max(a[r]-a[l],2*max(dp2[r],dp1[l])+2),ans); if(dp1[l+1]<dp2[r-1]) l++; else r--; } printf("%.1f",(double)ans/2); return 0; }