uva 1450LA 4725

xiaoxiao2021-02-28  106

#include<cstdio> #include<cstring> #define MAX(x,y) ((x)>(y)?(x):(y)) int d1[5100],d2[5100],n; int ok(int num) { int l=0,r=0,k=0,l1=0,r1=0; for(int i=0;i<n;i++) { int t=0; l+=d1[i]; r+=d2[i]; if(l>num) { if(l-num>l1||l-num>k) return 0; l1-=l-num; k-=l-num; l=num; } if(r>num) { if(r-num>r1||r-num>k) return 0; r1-=r-num; k-=r-num; r=num; } if(l1<l) l1++; if(r1<r) r1++; if(k<l+r) k++; } return 1; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); int l=1,r=0; for(int i=0;i<n;i++) { scanf("%d%d",&d1[i],&d2[i]); r+=MAX(d1[i],d2[i]); } while(l<r) { int m=(l+r)>>1; if(ok(m)) r=m; else l=m+1; } printf("%d\n",l-1); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-78414.html

最新回复(0)