2 条题解
-
2
#include <bits/stdc++.h> using namespace std; #define rep(i,_l,_r) for(signed i=(_l),_end=(_r);i<=_end;++i) #define print(x,y) write(x),putchar(y) template <class T> inline T read(const T sample) { T x=0; int f=1; char s; while((s=getchar())>'9'||s<'0') if(s=='-') f=-1; while(s>='0'&&s<='9') x=(x<<1)+(x<<3)+(s^48),s=getchar(); return x*f; } template <class T> inline void write(const T x) { if(x<0) return (void) (putchar('-'),write(-x)); if(x>9) write(x/10); putchar(x%10^48); } typedef long long ll; typedef pair <ll,ll> Pair; const int maxn=1e5+5; int n; Pair s[maxn]; int main() { n=read(9); rep(i,1,n) s[i].second=read(9ll),s[i].first=read(9ll); sort(s+1,s+n+1); ll ans=0,sum=0; int l=1,r=n; while(l<r) { if(sum<s[l].first) { if(s[r].second>s[l].first-sum) { s[r].second-=s[l].first-sum; ans+=(s[l].first-sum)*2,sum=s[l].first; } else { sum+=s[r].second; ans+=s[r].second*2; s[r].second=0,--r; } if(sum>=s[l].first) { sum+=s[l].second,ans+=s[l].second,++l; } } else sum+=s[l].second,ans+=s[l].second,++l; } if(l==r) { if(sum>=s[l].first) ans+=s[l].second; else { if(s[l].second>s[l].first-sum) ans+=(s[l].first-sum)*2+s[l].second-s[l].first+sum; else ans+=s[l].second*2; } } print(ans,'\n'); return 0; }
- 1
信息
- ID
- 1906
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 88
- 已通过
- 58
- 上传者