专栏文章

题解:P12218 [蓝桥杯 2023 国 Java B] 玩具

P12218题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipk2n44
此快照首次捕获于
2025/12/03 13:17
3 个月前
此快照最后确认于
2025/12/03 13:17
3 个月前
查看原文

思路

首先把 n2n*2,再把 ww 数组排序,可以发现,如果要使权值最小,只能:
w0wn1+w1wn2+w_0*w_{n-1}+w_1*w_{n-2}+\ldots
我们可以用双指针来实现。
另:因为 wiw_i 最大为 10510^5 所以要用 long long。

代码

CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    n*=2;//先把n*2
    vector<int> w(n);
    for(int i=0;i<n;i++) cin>>w[i];
    sort(w.begin(),w.end());//排序
    int l=0,r=n-1;//双指针,l和r分别赋值为0和n-1
    long long ans=0;
    while(l<r){
        ans+=(long long)w[l]*w[r];//大的+小的
        l++;
        r--;
    }
    cout<<ans;
    return 0;
}
谢谢观看!

评论

0 条评论,欢迎与作者交流。

正在加载评论...