【寒假每日一题】AcWing 4644. 求和(补)

简介: 目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解

一、题目

1、原题链接

4644. 求和 - AcWing题库


2、题目描述

给定 n个整数 a1,a2,⋅⋅⋅,an,求它们两两相乘再相加的和,即


S=a1⋅a2+a1⋅a3+⋅⋅⋅+a1⋅an+a2⋅a3+⋅⋅⋅+an−2⋅an−1+an−2⋅an+an−1⋅an


输入格式


输入的第一行包含一个整数 n。


第二行包含 n个整数 a1,a2,⋅⋅⋅,an。


输出格式


输出一个整数 S,表示所求的和。


请使用合适的数据类型进行运算。


数据范围


对于 30% 的数据,1≤n≤1000,1≤ai≤100。

对于所有评测用例,1≤n≤200000,1≤ai≤1000。


输入样例:


4

1 3 6 9

输出样例:


117


二、解题报告

1、思路分析

1)直接枚举,暴力求解时间复杂度为O(n^2),最坏情况要循环10^10左右,所以必定超时,无法暴力。


2)通过对式子简单分析可知,总和为第i项(i=1,2,3,....,n-1)乘(前n项前缀和-前i项前缀和),然后再求和,就可得到总和。


3)优化后的算法的时间复杂度为O(n)。


4)利用上述推导直接模拟即可。


其他思路:


思路来源:y总,今年有瓜分1万AC币的活动吗?每日一题_哔哩哔哩_bilibili


y总yyds


利用公式 ((a1+a2+...+an)^2-(a1^2+a2^2+...+an^2))/2 直接求解


2、时间复杂度

时间复杂度O(n)


3、代码详解

#include <iostream>

using namespace std;

long long a[200010];

long long s[200010];

int main()

{   long long n;

   cin>>n;

   for(int i=0;i<n;i++){

    cin>>a[i];

}

long long sum=0;

s[0]=a[0];

for(int i=1;i<n;i++){

 s[i]=s[i-1]+a[i];

}

for(int i=0;i<n;i++){

 sum+=a[i]*(s[n-1]-s[i]);

}

cout<<sum;

return 0;

}

目录
相关文章
蓝桥杯:最大公约数 2020省赛 例题:既约分数
蓝桥杯:最大公约数 2020省赛 例题:既约分数
65 0
|
6月前
每日一题(珠玑妙算,两数之和)
每日一题(珠玑妙算,两数之和)
57 1
|
存储 人工智能 测试技术
【AcWing每日一题】4644. 求和
【AcWing每日一题】4644. 求和
73 0
|
Python
牛客刷题之数学基础-约数
牛客刷题之数学基础-约数
49 0
|
前端开发 C语言 Cloud Native
【刷题日记】2. 两数相加
本次刷题日记的第 6 篇,力扣题为:2. 两数相加 ,中等
|
人工智能 测试技术
【寒假每日一题】AcWing 4655. 重新排序(补)
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 1、前缀和与差分 2、排序不等式
60 0
|
测试技术
【寒假每日一题】AcWing 4653. 数位排序(补)
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 关于pair
99 0
|
机器学习/深度学习 并行计算
【寒假每日一题】AcWing 4729. 解密(补)
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 韦达定理及其逆定理
78 0
【蓝桥杯集训·每日一题】AcWing 3625. 幂次方
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 快速幂
66 0
【寒假每日一题】AcWing 3443. 学分绩点(补)
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
72 0