ZOJ 3908Number Game

来源:互联网 发布:cms始源勇者王 编辑:程序博客网 时间:2024/05/17 18:16
#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <string>#include <vector>#include <queue>#include <stack>#include <cmath>#include <ctime>#include <list>#include <set>#include <map>using namespace std;typedef long long ll;#define PB push_back#define UB upper_bound#define LB lower_bound#define MP make_pair#define pii pair<int,int>#define vi vector<int>#define vii vector<vi>#define mst(x,y) memset(x,y,sizeof(x))#define fr(x) freopen(x,"r",stdin)#define fw(x) freopen(x,"w",stdout)#define iin(x) scanf("%d",&x)#define complete_unique(a) a.erase(unique(a.begin(),a.end()),a.end())#define sp system("pause")#define INF 1e9#define MAXN 100005#define PI acos(-1.0)#define eps 1e-10const int MOD = 1e9 + 7;multiset<int> mst;int a[100050];priority_queue<int> pq;int main(){int t;scanf("%d",&t);while(t--){int n,m,k;mst.clear();while(!pq.empty())pq.pop();scanf("%d %d %d",&n,&m,&k);for(int i=0;i<n;++i){scanf("%d",&a[i]);mst.insert(a[i]);}while(mst.size() >= 2){multiset<int>::iterator it,is;it = --mst.end();int x = *it;mst.erase(it);is = mst.upper_bound(k-x);if(is == mst.begin())continue;--is;pq.push(x*(*is));mst.erase(is);}ll sum = 0;for(int i=0;i<m;++i){if(pq.empty())break;sum += pq.top();pq.pop();}printf("%lld\n",sum);}return 0;}
0 0