欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

GCJ 2008 Round 1A Minimum Scalar Product( 水 )

发布时间:2023/12/15 编程问答 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 GCJ 2008 Round 1A Minimum Scalar Product( 水 ) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

链接:传送门

题意:给两个向量 v1 = { x1 , x2 , x3 , x4 .... } , v2 = { y1 , y2 , y3 , y4 ...... } 允许任意交换 v1 和 v2 各自向量的分量顺序,计算 v1,v2 内积 ( x1 * y1 + x2 * y2 .... )的最小值

思路:根据样例可大胆猜测内积最小值应该为 v1 的最小值 × v2 的最大值 , v1 的次小值 × v2 的次大值 ...... 也就是需要排两次序即复杂度为 O( nlogn )是可以通过大数据的


/*************************************************************************> File Name: gcj_2008_round1_A.cpp> Author: WArobot > Blog: http://www.cnblogs.com/WArobot/ > Created Time: 2017年06月19日 星期一 14时10分49秒************************************************************************/#include<bits/stdc++.h> using namespace std;#define ll long long const int MAX_N = 1002; int v1[MAX_N] , v2[MAX_N]; int n;bool cmp(int a,int b){return a > b; } int main(){int t , kase = 0;freopen("A-small-practice.in","r",stdin); // 测试小数据freopen("A-small-practice.out","w",stdout); // 测试小数据scanf("%d",&t);while(t--){scanf("%d",&n);for(int i = 0 ; i < n ; i++) scanf("%d",v1+i);for(int i = 0 ; i < n ; i++) scanf("%d",v2+i);sort(v1,v1+n);sort(v2,v2+n,cmp);ll ret = 0;for(int i = 0 ; i < n ; i++){ret += (ll)v1[i]*v2[i];}printf("Case #%d: %lld\n",++kase , ret);}return 0; }

转载于:https://www.cnblogs.com/WArobot/p/7048607.html

总结

以上是生活随笔为你收集整理的GCJ 2008 Round 1A Minimum Scalar Product( 水 )的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。