[蓝桥杯 2020 省 A1] 超级胶水 题解
题目大意
有 \(n\) 个石子,两颗石子的重量之和就是并成的一颗新石子的重量,合并两个石子需要的胶水等于两颗石子重量的乘积。
解题思路
如果一个石子的重量为 \(i\),另一个石子的重量为 \(j\),那么两个石子粘在一起所用的胶水就是 \(i\times j\);合并后石子的重量就是 \(i+j\)。
所以可以先将 \(sum\) 赋为第一个石子的重量,之后从 \(2\sim n\) 模拟粘石子的过程:
-
\(sum\) 每次乘上第 \(i\) 颗石子的重量,也就是胶水的数量。
-
再将 \(sum\) 每次加上第 \(i\) 颗石子的重量,也就是合并后的石子重量。
即 \(sum=\sum\limits_{i=2}^nw_i,ans=\sum\limits_{i=2}^nw_i\times sum\)。
最后输出胶水的数量即可。
代码
#include<bits/stdc++.h>
#define ri register int
#define ll long long
using namespace std;
ll n,w[100005],sum,ans=0;
int main() {
cin>>n;
for(ri i=1;i<=n;i++)
cin>>w[i];
int sum=w[1];
for(ri i=2;i<=n;i++){
ans+=sum*w[i];
sum+=w[i];
}
cout<<ans;
return 0;
}