题目描述
由两个用整数坐标表示的 NNN 维向量导出的。对于这两个向量中的任意一个,无论如何将它的坐标打乱(例如( a1,a2,a3a_1,a_2,a_3a1,a2,a3 )变成(a3,a1,a2a_3,a_1,a_2a3,a1,a2)),打乱后的数量积都不会比原来的两个向量的数量积小。而库特就把原来的两个向量的数量积作为了密码。求出最小的数量积。
题目解析
首先知道数量积为∑i=1Nai×bi\sum_{i=1}^N{a_i\times b_i}i=1∑Nai×bi
贪心,一个升序,一个降序,相乘即可。记得开longlonglong longlonglong
代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[1005],b[1005],ans;
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
sort(a+1,a+1+n);sort(b+1,b+1+n);
for(int i=1;i<=n;i++) ans+=a[i]*b[n-i+1];
printf("%lld",ans);
}