编程挑战-高校俱乐部 1.最小向量乘积 2.独特区间

题目详情

两个N维向量的点积定义为,对应维度上的数的乘积之和。

两个三维向量[1, 3, −5]和[4, −2, −1]的点积是1 * 4 + 3 * (-2) + (-5) * (-1) = 3

现在允许我们对两个向量里的维度重新排列,让点积尽可能小。

例如上述两个向量,我们可以调整维[3,1,-5]和[-2,-1,4],点积是-27。

输入格式:

多组数据,每组数据第一行是一个整数n,表示向量的维数。1<=n<=100000。

下面两行,每行是n个空格分隔的整数表示两个n维向量,每一维的范围都是[-1000000,+1000000]之间。

输出格式:

对于每组数据,输出一行,包含一个整数,代表可以调整到的最小的点积。

答题说明

输入样例

3

3 1 -5

-2 -1 4

输出样例:

-27


思路:考虑二维向量,对于向量a,b  ab=cos(c)*|a|*|b|. 而|a|,|b|的大小是不会变的,因此为了使ab尽量小,则需要使 cos(c)尽可能小。(c为向量a,b的夹角)


        现在就是考虑什么样的情况下,夹角最大呢?


        就是当向量a的维度是从小到大排列,而向量b的维度是相反的顺序:从大到小排列时,他们的夹角最大。证明过程给不出。



        所以呢,我们只需要对向量a,b进行排序,一个从小到大排序,一个从大到小排序,然后再相乘,就可以得出最小的值了。

        

        由于涉及的数据可能会超过32位,因此使用__int64来进行存储,也可以使用double.



代码略。




题目详情

给你一个长度为n的正整数序列A1,A2,A3...An,请你求出有多少个独特区间,独特区间就是一个连续的并且区间里的每个数都不相同的子序列。

例如:1 2 3 答案就是6,因为每个数都不行同。 1 2 2 答案是4

输入描述:

   输入包含多组测试数据,每组测试数据包含两行,第一行为一个正整数n(0<n<=1000000);第二行包含n个正整数,每个数都小于2^30,每两个数以空格隔开。

输出描述:

   对于每组测试数据输出相应的答案。

答题说明

样例输入:

5

3 4 5 5 2

3

1 2 3

样例输出:

9

6


思路:对于长度为n的正整数序列A1,A2,A3...An。分别计算以A1,A2,...An开头的独特区间长度。相加即为答案。


如:2 3 5 5 2


2开头:长度为3(代表区间【2】,【2,3】,【2,3,5】)

3开头,长度为2(代表区间【3】,【3,5】)

5开头,长度为1(代表区间【5】)

5开头,长度为2(代表区间【5】,【5,2】)

2开头,长度为1(代表区间【2】)

累加为9,即为答案


代码略。时间复杂度o(n^2),AC了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值