有两个向量 v1=(x1,x2,...,xn) 和 v2=(y1,y2,...,yn), 允许任意交换v1 和v2 各自分量的顺序。
请计算 v1 和 v2 的内积x1y1+x2y2+...+xnyn 的最小值。
输入
- 第一行输入整数 T(1≤T≤1000),表示有多少组测试数据
- 每组测试数据包括三行:
- 第一行包含一个整数 n
- 第二行有 n 个整数, 表示x1,x2...xn
- 第三行有 n 个整数, 表示y1,y2...yn
- 1000001≤n≤800,−100000≤xi,yi≤100000
输出
- 输出 T 行,每行格式:
Case #{第几组测试数据}: {答案}
,表示第几组测试数据,答案是多少
样例 1
输入
2 3 1 3 -5 -2 4 1 5 1 2 3 4 5 1 0 1 0 1
输出
Case #1: -25 Case #2: 6
#include<bits/stdc++.h>
using namespace std;
int a[(int)1e6+5];
int b[(int)1e6+5];
int main()
{
int T;
int n;
while(cin>>T){
int num=1;
while(T--){
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
sort(a,a+n);
sort(b,b+n,greater<int>());
long long sum=0;
for(int i=0;i<n;i++)
sum+=(long long)a[i]*b[i];
cout<<"Case #"<<num<<": "<<sum<<endl;
num++;
}
}
}
Sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
Sort函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序