1049 數列的片段和 20

2021-08-08 23:05:08 字數 1213 閱讀 2426

時間限制

200 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者 cao, peng

給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列,我們有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 這10個片段。

給定正整數數列,求出全部片段包含的所有的數之和。如本例中10個片段總和是0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。

輸入格式:

輸入第一行給出乙個不超過105的正整數n,表示數列中數的個數,第二行給出n個不超過1.0的正數,是數列中的數,其間以空格分隔。

輸出格式:

在一行中輸出該序列所有片段包含的數之和,精確到小數點後2位。

輸入樣例:

4

0.1 0.2 0.3 0.4

輸出樣例:
5.00

本題肯定不能暴力,要找資料的規律。找規律部分見**頭部分析。

本題有意思的地方在於輸出的要求,就是如何精確到小數點2位。在做雙精度資料運算的時候,盡量不要把誤差放大,要減少截斷誤差,所以,下面**中調整了t和i的位置,效果真的很不一樣。^_^

//分析一下第i個數(位序)出現的次數,它前面有i-1個數,後有n-i個數。

//前面i-1個數訪問自己的次數有i-1次,訪問自己後面n-i個數都要經過自己,所以有(n-i)*(i-1)次。

//自己主動出發訪問自己及後面的次數有n-i+1次,當然其中n-i表示後面個數,其中1表示訪問自己1次。

//所以第i數出現的次數為:(i-1)+(n-i)*(i-1)+(n-i+1)次,即(n-i+1)*i。^_^

#include #include using namespace std;

int main()

printf("%.2lf\n", s);

return 0;

}

1049 數列的片段和 20

給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列,我們有 0.1 0.1,0.2 0.1,0.2,0.3 0.1,0.2,0.3,0.4 0.2 0.2,0.3 0.2,0.3,0.4 0.3 0.3,0.4 0.4 這10個片段。給定正整數數列,求出全部片段包含的所有...

1049 數列的片段和 20

給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列,我們有 0.1 0.1,0.2 0.1,0.2,0.3 0.1,0.2,0.3,0.4 0.2 0.2,0.3 0.2,0.3,0.4 0.3 0.3,0.4 0.4 這10個片段。給定正整數數列,求出全部片段包含的所有...

1049 數列的片段和 20

給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列,我們有 0.1 0.1,0.2 0.1,0.2,0.3 0.1,0.2,0.3,0.4 0.2 0.2,0.3 0.2,0.3,0.4 0.3 0.3,0.4 0.4 這10個片段。給定正整數數列,求出全部片段包含的所有...