@994495jj
2017-07-16T13:21:32.000000Z
字数 1317
阅读 808
201707 (ACM)思维
#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int, int> pii;typedef vector<int> vi;#define fi first#define se second#define mp make_pair#define pb push_back#define rep(i, a, b) for(int i=(a); i<(b); i++)#define sz(a) (int)a.size()//---------------const int N=100005;struct Node {int a,b,c,val;bool operator < (const Node &tmp) const {return val>tmp.val;}}nn[N];int n,k;ll sumv[N];int bin(int x) {int ans=0,l=1,r=n;while(l<=r) {int m=(l+r)>>1;if(nn[m].val>x) {ans=m;l=m+1;} else {r=m-1;}}return ans;}int main() {int T;scanf("%d",&T);while(T--) {///scanf("%d%d",&n,&k);///readll sumc=0;rep(i,1,n+1) {int a,b,c;scanf("%d%d%d",&a,&b,&c);nn[i]={a,b,c,a+b-c};sumc=sumc+c;}///get sumsort(nn+1,nn+n+1);rep(i,1,n+1) sumv[i]=sumv[i-1]+nn[i].val;///solvell ans=0;rep(i,1,n+1) {int p=bin(nn[i].b);p=min(p,k);ll res=0;if(i<=p) {res=sumc+sumv[p]+1ll*(k-p)*nn[i].b;} else {if(p==k) --p;res=sumc+sumv[p]+nn[i].val+1ll*(k-p-1)*nn[i].b;}ans=max(ans,res);}printf("%lld\n",ans);}return 0;}
