神奇的項鍊(數學)

2021-09-11 01:45:56 字數 1071 閱讀 9961

題目描述

笨笨有一條神奇的項鍊,為什麼說它神奇呢?因為它有兩個性質:

神奇的項鍊可以拉成一條線,線上依次是n個珠子,每個珠子有乙個能量值ei;

除了第乙個和最後乙個珠子,其他珠子都滿足ei=(ei-1+ei+1)/2+di。 由於這條項鍊很長,我們只能知道其兩端珠子的能量值。並且我們知道每個珠子的di是多少。請聰明的你求出這n個珠子的能量值分別是多少。輸入

第一行三個整數n、e1、en,表示珠子個數n,第乙個珠子和第n個珠子的能量值。

第二行n-2個整數,表示第2個珠子到第n-1個珠子的di。

輸出輸出僅一行,n個整數,表示1到n個這n個珠子各自的能量值ei。每2個整數之間用1個空格隔開;請放心,資料保證對於任意珠子滿足(ei-1+ei+1)mod 2=0;

暴力推一下:

因為e[i]=(e[i-1]+e[i+1])/2+d[i]

所以e[i]=(e[i-1]-d[i])*2-e[i-2]=e[i-1]*2-e[i-2]-d[i-1]*2

推一下可得:

e[3]=e[2]*2-e[1]-d[2]*2

e[4]=e[2]*3-e[1]*2-d[2]*4-d[3]*2

e[5]=e[2]*4-e[1]*3-d[2]*6-d[3]*4-d[4]*2

得到e[n]=e[2](n-1)-e[1](n-2)-d[2]*(n-2)2-d[3](n-3)*2-…

解e[2]得e[2]=(e[n]+(d[2]*(n-2)2+d[3](n-3)2+…)+e[1](n-2))/(n-1)

再從頭列舉下去即可。

1 #include

2 long long n,en,e[500001],d[500001];

3 int main(void)

10 en=(en+e[1](n-2))/(n-1);

11 printf("%lld %lld 「,e[1],e[2]=en);

12 for(int i=3;i13 printf(」%lld 「,e[i]=(e[i-1]-d[i-1])*2-e[i-2]);

14 printf(」%lld",e[n]);

15 }

神奇的項鍊 fett

題目描述 從前有一條神奇的項鍊,為什麼說它神奇呢?因為它有兩個性質 1.神奇的項鍊可以拉成一條線,線上依次是n 個珠子,每個珠子有乙個能量值ei 2.除了第乙個和最後乙個珠子,其他珠子都滿足ei ei 1 ei 1 2 di。由於這條項鍊很長,我們只能知道其兩端珠子的能量值。並且我們知道每個珠子的 ...

3790 神奇項鍊

容易發現,處理回文串的時候得到的答案是可以去更新答案的,即 令 f i f i 表示處理前 i i 個最小由幾個回文串構成,那麼,對於第 i role presentation i i個位置,他由 i p i n i p i n 能更新的就是 前 1 i p i 1 1,i p i 1 因為前字尾相...

3790 神奇項鍊

母親節就要到了,小 h 準備送給她乙個特殊的項鍊。這個項鍊可以看作乙個用小寫字 母組成的字串,每個小寫字母表示一種顏色。為了製作這個項鍊,小 h 購買了兩個機器。第乙個機器可以生成所有形式的回文串,第二個機器可以把兩個回文串連線起來,而且第二個機器還有乙個特殊的性質 假如乙個字串的字尾和乙個字串的字...