c++源码:就是排序但不要拆开排,话说你们有没有人会5.20.c组的第三题简直玄学
#include<bits/stdc++.h>using namespace std;int n,L,R;long long ans=-1;struct node{long long val;int num;}cow[100050];bool comp(node a,node b){return a.val<b.val;}void find(){while(L!=R){ans = max(ans,cow[L].val+cow[R].val);if(cow[L].num>cow[R].num){cow[L].num -= cow[R].num;cow[R].num -= cow[R].num;R-=1;}else if(cow[L].num<cow[R].num){cow[R].num -= cow[L].num;cow[L].num -= cow[L].num;L+=1;}else{cow[L].num -= cow[L].num;cow[R].num -= cow[R].num;L+=1;R-=1;}}ans = max(ans,cow[L].val+cow[R].val);}int main(){cin >> n;for(int i=1;i<=n;i++)cin >> cow[i].num >> cow[i].val;L = 1;R = n;sort(cow+1,cow+n+1,comp);find();cout << ans;}
#include<bits/stdc++.h>using namespace std;int n,L,R;long long ans=-1;struct node{long long val;int num;}cow[100050];bool comp(node a,node b){return a.val<b.val;}void find(){while(L!=R){ans = max(ans,cow[L].val+cow[R].val);if(cow[L].num>cow[R].num){cow[L].num -= cow[R].num;cow[R].num -= cow[R].num;R-=1;}else if(cow[L].num<cow[R].num){cow[R].num -= cow[L].num;cow[L].num -= cow[L].num;L+=1;}else{cow[L].num -= cow[L].num;cow[R].num -= cow[R].num;L+=1;R-=1;}}ans = max(ans,cow[L].val+cow[R].val);}int main(){cin >> n;for(int i=1;i<=n;i++)cin >> cow[i].num >> cow[i].val;L = 1;R = n;sort(cow+1,cow+n+1,comp);find();cout << ans;}