【U1689】两两求和-洛谷

题目描述 Description

求a1a2+a1a3+a1a4+…+a1an+a2a3+a2a4+…+a2an+a3a4+…+a3an+…+an-2an-1+an-2an+an-1an的值。

输入输出格式 Input/output

输入格式:
第一行,一个整数n,
第二行,n个整数,代表ai(a[i])。
输出格式:
输出一行,一个整数表达式的值。

样例测试点#3

输入样例: 在线IDE

15
3 5 6 7 9 10 11 12 14 15 17 20 23 24 26

输出样例:
18674

样例测试点#4

输入样例: 在线IDE

30
1 3 4 6 8 11 15 5 2 7 3 3 6 7 9 11 15 21 24 3 1 5 6 7 8 90 1 5 8 3

输出样例:
39162

说明 description

数据规模:
对于100%的数据,2<=n<=1000000,1<=a[i]<=1000。

#include<cstdio>
int main()
{
    int n,a[100000],i,j;
    long long sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        sum+=a[i];
    }
    long long sum1=0,sum2=0,ans=0;
    for(i=1;i<=n;i++)
    {
        sum1+=a[i];
        sum2=sum-sum1;
        ans+=a[i]*sum2;
    }
    printf("%I64d",ans);
}

把O(N*N)的复杂度变为O(N)

时间: 2024-10-17 13:29:55

【U1689】两两求和-洛谷的相关文章

高斯求和等差数列前缀和(洛谷1147 连续自然数和)

对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解. 输入格式: 包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000). 输出格式: 每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一

【洛谷P2261】[CQOI2007]余数求和

题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值,其中k mod i表示k除以i的余数.例如G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 -- + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29 输入输出格式 输入格式: 两个整数n k 输出格式: 答案 输入输出样例 输入样例#1: 10 5 输出样例

BZOJ5291/洛谷P4458/LOJ#2512 [Bjoi2018]链上二次求和 线段树

原文链接http://www.cnblogs.com/zhouzhendong/p/9031130.html 题目传送门 - LOJ#2512 题目传送门 - 洛谷P4458 题目传送门 - BZOJ5291 推荐LOJ和洛谷,题面质量好,而且不卡常数. BZOJ题面烂,而且要卡那么一点点常数. 题意 有一条长度为$n$的链$\forall 1≤i<n$,点$i$与点$i+1$之间有一条边的无向图),每个点有一个整数权值,第$i$个点的权值是$a_i$??.现在有$m$个操作,每个操作如下: 操

两分数求和化最简【杭电-2503】 附题

/* a/b + c/d Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7731    Accepted Submission(s): 4462 Problem Description 给你2个分数,求他们的和,并要求和为最简形式. Input 输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四

算法——两数求和

题目 给定一个整数数组nums 和 一个目标值target,请你在数组中找出和为目标值的那 两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums = [2,7,11,15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0,1] 思路: 两次轮询,两两相加 一次轮询,对比差值 解答 方法一: /// <summary> /// 方法一:暴力破解法 ///

洛谷1093 奖学金 解题报告

洛谷1093 奖学金 本题地址:http://www.luogu.org/problem/show?pid=1093 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的.  任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排

二分查找or线段树(借教室洛谷1083vijos1782NOIP 2012 提高组 第二天 第二题)

在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题.我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定,租借者对教室的大小.地点没有要求.即对于每份

洛谷 P1001 A+B Problem

题目描述 输入两个整数a,b,输出它们的和(|a|,|b|<=10^9). 注意 1.pascal使用integer会爆掉哦! 2.有负数哦! 3.c/c++的main函数必须是int类型,而且最后要return 0.这不仅对洛谷其他题目有效,而且也是noip/noi比赛的要求! 好吧,同志们,我们就从这一题开始,向着大牛的路进发. “任何一个伟大的思想,都有一个微不足道的开始.” 输入输出格式 输入格式: 两个整数以空格分开 输出格式: 一个数 输入输出样例 输入样例#1: 20 30 输出样

洛谷3380 二逼平衡树(树套树)

题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在区间内的前驱(前驱定义为严格小于x,且最大的数,若不存在输出-2147483647) 查询k在区间内的后继(后继定义为严格大于x,且最小的数,若不存在输出2147483647) 注意上面两条要求和tyvj或者bzoj不一样,请注意 输入输出格式 输入格式: 第一行两个数 n,m 表示长度为n的有序序列和m个操作 第二行有n个数,