做完这道题目,我只想说 天灭Struct,Pair保平安。
Struct跑10s Pair只需要0.2s 顺便膜拜一下BZOJ的评测机 Orz
看到有的题解说需要二分,有点汗颜。我觉得这个题目的解法就是排序模拟啊。。。
对于配对最小,我们尽量让最大和最小的配对就可以了。每次再记录一下最大值就可以了。。
#include#include std::pair now[100005]; int n,tot;int m; int main(){ scanf("%d",&n); int l = 1,r = n; for(int i=1;i<=n;i++) scanf("%d%d",&now[i].second,&now[i].first); std::sort(now+1,now+1+n); while(l >1; tot = std::max(tot,now[l].first+now[r].first); int fuck = std::min(now[l].second,now[r].second); now[l].second-=fuck; if(!now[l].second) ++l; now[r].second-=fuck; if(!now[r].second) --r; } if(l==r) tot = std::max(tot,now[l].first+now[l].first); printf("%d\n",tot); return 0;}