題目名字 求和
題目鏈接
題意
輸入的每個數都要兩兩相乘,然后再加起來,求最后總和;
思路
- 每個數乘這個數的前綴和即可
算法一:前綴和
實現步驟
- 先把前綴和寫出來
- 再寫for循環每個數都乘以自己的前綴和;
實現步驟
- 直接在for循環輸入里面進行相乘相加的運算
代碼
#include <iostream>
using namespace std;
const int N=1e6+10;
int n,a[N];
long long int sum=0,m=0;
int main()
{cin>>n;for(int i=0;i<n;i++){cin>>a[i];sum=sum+m*a[i];m=m+a[i];}cout<<sum<<endl;return 0;
}
時間復雜度
總結
- 在剛開始寫的時候想的是用枚舉的方法,兩重for循環,但是只能對兩個而且還超時了,所以一直寫不出來,因為超時原因,所以不能直接暴力解決,可以進行一個小的運算;
- 不把這個題想的太死板,換個解題思路,直接就是這個數和這個數的前一項的前綴和直接相乘,就會清晰明了的多,但是要注意一下,實現后面的for循環i是等于n的,因為不能從第一個數字進行這個運算,所以掌握這種思維的靈活運用還是挺重要的,如果再次遇到這種會超時的題目不妨試試換個思路
- 當然還可以用在循環里輸入的時候直接完成了相乘和相加的工作,還是要多練題,想法有了但是一直寫不出來,或者各種小問題;