1 条题解
-
0
#include<bits/stdc++.h> #define int long long using namespace std; int t; pair<int,int> a[200005]; // first存x,second存y signed main(){ cin>>t; while(t--){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i].first; for(int i=1;i<=n;i++) cin>>a[i].second; sort(a+1,a+n+1); // 按x升序 priority_queue<int> q; // 大根堆 int sum=0, ans=1e18; for(int i=1;i<=n;i++){ sum += a[i].second; q.push(a[i].second); if(q.size() == k){ ans = min(ans, a[i].first * sum); sum -= q.top(); // 移除当前最大的y,为下一轮做准备 q.pop(); } } cout<<ans<<endl; } return 0; }
- 1
信息
- ID
- 7919
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 8
- 标签
- 递交数
- 20
- 已通过
- 7
- 上传者