題目描述
笨笨有一條神奇的項鍊,為什麼說它神奇呢?因為它有兩個性質:
神奇的項鍊可以拉成一條線,線上依次是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 購買了兩個機器。第乙個機器可以生成所有形式的回文串,第二個機器可以把兩個回文串連線起來,而且第二個機器還有乙個特殊的性質 假如乙個字串的字尾和乙個字串的字...