1 solutions
-
0
C :
#include<stdio.h> #define MAXN 1110100UL #define INF 0x7fffffff #define max(a,b) a>b?a:b #define min(a,b) a<b?a:b long long int ave,ans,ANS; long long int sum,n,l=INF ; long long int r,mid,v[MAXN],now[MAXN],w[MAXN]; int check(int mid){ for(int i=1;i<n;++i){ if(w[i]<mid) w[i+1]=w[i+1]+w[i]-mid+v[i]-v[i+1]; if(w[i]>mid&&w[i]-mid-v[i+1]+v[i]>0) w[i+1]=w[i+1]+w[i]-mid-v[i+1]+v[i]; } if(w[n]>=mid) return 1; return 0; } int main(){ #ifndef MAXN freopen("fish.in","r",stdin); freopen("fish.out","w",stdout); #endif scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d%d",&v[i],&w[i]); now[i]=w[i],sum+=w[i]; l=min(l,w[i]); }r=sum+1; while(l<=r){ mid=(l+r)>>1; for(int i=1;i<=n;++i) w[i]=now[i]; if(check(mid)) ans=mid,l=mid+1; else r=mid-1; }printf("%d",ans); return 0; }
C++ :
#include<iostream> #include<cstdio> #include<cstring> #define Maxn 100010 #define int64 long long using namespace std; int64 N,a[Maxn]={0},b[Maxn]={0},c[Maxn]={0}; void init(){ cin>>N; for(int i=1;i<=N;i++){ scanf("%d%d",&a[i],&b[i]); } a[N+1]=a[N]; } bool ok(int64 mid){ int64 now=0; for(int i=1;i<=N+1;i++) c[i]=b[i]; for(int i=1;i<=N;i++){ if(i>1) now-=a[i]-a[i-1]; if(now<0) now=0; now+=c[i]; if(now<mid){ if(i<N){ c[i+1]-=mid-now+a[i+1]-a[i]; now=mid; } else return false; } now-=mid; } return true; } void work(){ int64 l=1,r=1000000000; while(l<=r){ int64 mid=(l+r)>>1; if(ok(mid)) l=mid+1; else r=mid-1; } cout<<r<<endl; } int main(){ init(); work(); return 0; }
- 1
Information
- ID
- 717
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By