問題 M 夢開始的地方

2021-09-25 19:06:31 字數 1774 閱讀 1305

題目描述

這裡,是夢開始的地方。

「天哪,這裡怎麼也會有這種喪題……」

這真的是最後一題了,tweetuzki還沒解出來的最後一題了。點開提交狀態,紅色的-1字樣在漫漫的綠海中,如同臉上的一道疤一樣顯眼。

「完了,我ak的夢想要破滅了嗎?」

這種離勝利只差一步,但卻無法觸及的感覺,最是令人焦慮。他徘徊彷徨,懇請思路的到來。

「!」忽然一陣靈光從tweetuzki腦中閃過。

「這不就是,最基礎的那種演算法!」

雀躍的指尖在鍵盤上跳動,一行行**在螢幕上飛速顯現出來。

accepted.

「終於,達成了……」

是的,本次提高模擬賽的t1,就是這道題。tweetuzki希望這裡,也能夠成為你夢開始的地方。

有乙個長度為n的序列a1,a2,⋯,an。一次操作可以將某個元素的值加一或者減一,每個元素最多只能進行一次操作。求最少需要多少次操作,才能將這個序列變成乙個等差數列。

注:我們稱乙個長度為m的數列b是乙個等差數列,當且僅當對於任意的i(1≤i輸入

第一行輸入乙個正整數n(1≤n≤105),表示數列長度。

接下來一行輸入n個正整數a1,a2,⋯,an(1≤ai≤109),描述這個數列。

輸出輸出檔案應包含一行乙個整數。若無法操作出這樣的等差數列,輸出−1 即可;否則輸出最小運算元。

樣例輸入

複製樣例資料 4

24 21 14 10

樣例輸出3提示

可以將第1個元素增加1,第2個元素減少1,第3個元素增加1,形成[25,20,15,10]的等差數列。可以證明這是改變元素個數最少的情況,因此答案為3。

subtask #1:n≤10。

subtask #2:n≤20。

subtask #3:n≤1 000。

subtask #4:無特殊性質。

思路:其實題目有提示了(最基礎的演算法),一開始想複雜了其實暴力列舉即可;

1)首項a1有三種情況:a[1]+1 || a[1] || a[1]-1 (a[1]是輸入的首項)

令 d=(a[n]-a[1])/(n-1)

2)公差d也有三種情況:d-1 || d || d+1 (可以證明最多三種,若數列是乙個公差為d等差數列改變後的數列,

( (an+1)-(a1-1) )/(n-1)=(d(n-1)-2)/(n-1)=d-2/(n-1),n>=2,時d最多改變2;d-1與d+2相差2;

一共有九種情況

然後根據首項和公差求出每一項是多少和原數列比較一下,看看改變了多少即可

**:

const

int maxn=

1e5+5;

int a[maxn]

;int n;

intslove

(int cha,

int a1)

return sum;

}int

main()

///注意判n==1的情況

int ans=n+5;

for(

int i=

1;i<=n;i++

) cin>>a[i]

;int cha=

(a[n]

-a[1])

/(n-1)

;///以下列舉9種情況

for(

int i=-1

;i<=

1;i++)}

if(ans==n+

5) cout<<-1

夢開始的地方

直聳雲端的雪峰珠穆朗瑪,終年積雪的唐古拉山,翡翠般的納木措湖,神聖莊嚴的布達拉宮,遼遠醇厚的日喀則,花之海洋莫屬林芝江南,蜿蜒伸展的雅魯藏布江,傳奇般的的秀美山南,還有羅布林卡是太陽公升起的地方 沿著天路前行,你就會來到心靈的歸宿,它就是 大美 題記 即使你從未踏上這片聖潔的土地,你的心中又怎能不對...

九月英語 夢開始的地方

新學期開學了,我已經不知不覺中到了大四了,是的,我全職了,伴隨著全職的喜悅,我的英語也開始迎來了喜悅。我們在萬達全職的同學,現在每天都會唱英文歌,這是以前只能在家或者歌廳才能幹的事情,雖然時間有點少,而且還有點放不開,但是有了開始,遲早有變好的那一天。舊美我已經聽了六遍了,現在感覺對我的幫助已經不太...

POJ1852 Ants 夢開始的地方

挑戰程式設計競賽 的第一道oj題目,記錄一下 題目大致描述是 有一群螞蟻在一根水平木棒上,給出初始時每只螞蟻在木棒上距離木棒左端的位置,螞蟻可向左向右移動,當螞蟻走到木棒的一端時會掉下木棒,求所有螞蟻全部掉下木棒的最短時間和最長時間。考慮最短時間,所有螞蟻朝著距離自己較近的一端走,求出用時最多的螞蟻...