VJ ——D - MaratonIME in the golden moment Gym - 101375D

博客介绍了在ICPC比赛背景下,Giovana Delfino邀请朋友们赛艇的故事。每个朋友有不同的体能能力,当两人一起划船时,船的能力会增加两人体能的乘积。问题在于找出所有朋友都出席时,船的最大能力。输入包含朋友的数量和他们的体能,输出是所有组合的体能乘积之和。提示要求避免使用超时的二重循环解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

D - MaratonIME in the golden moment
time limit per test0.5 s
memory limit per test256 MB
inputstandard input
outputstandard output

Statements
It is a common knowledge the importance in practicing a physical activity, mainly when you take part in ICPC competitions. Keeping this in mind, Giovana Delfino invited her friends from MaratonIME to go rowing.

The initial total ability of the boat is 0. Despite the equal enthusiasm of all members, each friend i has a physical ability h(i). Dear teacher Gabi knows that whenever two friends x and y are together in the boat, the boat’s total ability is increased by h(x)·h(y).

Giovana invited n friends, but rowing is not always possible when you have programming assignments and exams of the great professor Arnaldo Mandel ahead, so sometimes not everyone shows up. However, the teacher Gabi is very optimistic and hopes that, for the final semester competition, all n friends will attend in order to increase MaratonIME odds. Help Gabi find the total ability of the boat in this possible golden moment, assuming all friends show up.

Input
The first line contains one integer n (1 ≤ n ≤ 105) - the number of friends invited to row.
The second line contains n integers h1, h2, …, hn (1 ≤ hi ≤ 3·104) - the abilities of each member.

Output
Print one integer - the boat’s total ability in the golden moment.

Examples
Input
2
5 10

Output
50

Input
4
1 3 7 11

Output
152

Note
In the first example, in the golden moment there will be two members on the boat, then the ability there will be 5 × 10 = 50.

**提示:**对于输入的数每两个数字有且进行一次相乘并求和,由于本题限时要求高,不能简单的用二重for循环,会超时


AC代码:


#include <bits/stdc++.h>
using namespace std;
long long a[100010];
int main()
{
    long long n,s,num,i;
    while(cin>>n&&n>=1)
    {
        s=0,num=0;
        for(i=0; i<n; i++)
        {
            cin>>a[i];
            s+=a[i]; //求和
        }
        for(i=0; i<n-1; i++)
        {
            s-=a[i]; //每次减一个数
            num+=a[i]*s; //求和
        }
        cout<<num<<endl;
    }
    return 0;
}



余生还请多多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值