有两个向量 v1?=(x1?,x2?,...,xn?) 和 v2?=(y1?,y2?,...,yn?), 允许任意交换v1? 和v2? 各自分量的顺序。
请计算 v1? 和 v2? 的内积x1?y1?+x2?y2?+...+xn?yn? 的最小值。
输入
- 第一行输入整数 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<数据类型>()//从大到小排序