1 条题解

  • 0
    @ 2026-3-8 14:02:53
    #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
    上传者