当前位置: 代码迷 >> 综合 >> 最小标量积 Minimun Scalar Product(挑战程序设计竞赛)
  详细解决方案

最小标量积 Minimun Scalar Product(挑战程序设计竞赛)

热度:40   发布时间:2023-12-13 05:18:40.0

有两个向量 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<数据类型>()//从大到小排序

  相关解决方案