1. 程式人生 > >PAT (Basic Level) Practice (中文)- 1049 數列的片段和(20 分)

PAT (Basic Level) Practice (中文)- 1049 數列的片段和(20 分)

題目大意:略。

解題思路:

1、每個 a[i] 右邊出現過幾次,左邊出現過幾次,右邊規律好找比較穩定,然後用總次數手算出來除以右邊的次數,發現左邊的規律也來了。
2、注意:變數計算的順序不一樣會導致溢位的情況。

AC 程式碼

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        double a,rs=0;
        for(int i=0;i<n;i++)
        {
            scanf("%lf",&a);
            rs+=a*(i+1)*(n-i);   // 不會溢位
//            rs+=(i+1)*(n-i)*a; // 會溢位
        }

        printf("%.2f\n",rs);
    }

    return 0;
}