題目描述
這裡,是夢開始的地方。
「天哪,這裡怎麼也會有這種喪題……」
這真的是最後一題了,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題目,記錄一下 題目大致描述是 有一群螞蟻在一根水平木棒上,給出初始時每只螞蟻在木棒上距離木棒左端的位置,螞蟻可向左向右移動,當螞蟻走到木棒的一端時會掉下木棒,求所有螞蟻全部掉下木棒的最短時間和最長時間。考慮最短時間,所有螞蟻朝著距離自己較近的一端走,求出用時最多的螞蟻...