[傳智杯]程式設計師節發橙子
時間限制: 2sec 記憶體限制: 512mb 提交: 502 解決: 33
題目描述
每年的 1024 程式設計師節日,黑馬程式設計師都會舉辦大型的慶祝活動。今年的程式設計師節也不例外,每個班級的同學都發了橙子。
班級裡有 n 名同學從前到後排成一排,且已經得知了這些同學的成績,其中第 i 名同學的成績是 ai。班主任想根據同學們上個階段的考試成績來評定發橙子的數量。為了激勵成績優秀同學,發橙子時需要滿足如下要求:
相鄰同學中成績好的同學的橙子必須更多。若相鄰的同學成績一樣,則它們分到的數量必須平等。
每個同學至少分配乙個橙子
由於預算有限,班主任希望在符合要求的情況下發出盡可能少的橙子。請問,至少需要準備多少橙子呢?
輸入第一行是乙個不超過 10^6 正整數 n,表示學生數量。
接下來一行有 n 個不超過 10^9 的非負整數 ai,表示第 i 個同學的成績。
輸出輸出答案,也就是需要最少準備多少個橙子。
樣例輸入
53 4 5 4 3
樣例輸出
9我的思路是,這道題無非就兩種情況,遞增序列和遞減序列,例如3,4,5是增序列,5,4,3是減序列,當然,若出現相同的數字,我們把它當為乙個數看,我們把最大值5都記錄在兩個序列中,增序列的情況很簡單,就下乙個發的數量比上乙個的人多乙個就行了。關鍵是減序列,他又分為兩種情況,一種是減序列的個數比增序列少的情況,還有一種就是減序列的數目比增序列多的情況,這時最大值開始假設發的橙子數就發生了變化,變為了假減序列的個數加1.
#include
#include
#include
#include
#define maxsize 1000005
typedef
long
long ll;
using
namespace std;
int minx=0;
//記錄減序列一共的個數(包括重複的數字)易得減序列的個數等於減序列所有的數減去重複的個數:即minx-chong;
int chong=0;
//記錄減序列重複個數
int flag=0;
//記錄是否進入減序列
ll node;
//記錄最大值的假設橙子個數
ll value[maxsize]
;int n;
intmain()
else
if(value[i]
==value[i-1]
)//當相等的情況時
sum+
=cnt;
}else
//是減序列的情況
cnt=1;
//將剛進來的數的發橙子數設為1;
minx++;if
(minx-chong+
1>node)
//如果減序列的個數+1大於了最大值
sum+
=minx;}}
cout
}
1024程式設計師節
10.24!祝每一位程式設計師 節日快樂!遨遊在 的海洋裡,我們期待用技術讓這個世界變得更美好,希望用程式來幫助人們完成心中的目標,這種進化將打破時間和空間的限制,推動智慧型文明向前。而這一切的願景,都離不開每一位程式設計師貢獻的奇思妙想和你們寫出的每一行精彩的 程式設計是溝通人心和機器的精湛技藝,...
1024程式設計師節,深圳全城尋找程式設計師
10月20日,在望京 751 南鑼鼓巷 奧林匹克公園等多處北京街頭,出現的全城尋找程式設計師的事件,現在已經蔓延至全國其他城市。就在今天,深圳中糧科技創業園和華強電子世界等,程式設計師集中的區域,驚現 快閃尋人 她 她 它們手舉著廣告牌,上面寫著各種標語,呼籲在1024程式設計師節當天,可以讓程式設...
1024程式設計師節獲獎通知
這只是昨天的乙個小活動,本來準備是從 的人中隨機抽乙個朋友的。後來想 做點新的嘗試 我只是喜歡收集各種行為的使用者反應資料 在打賞的人中,抽乙個 朋友送一本書。因為一本書也就幾十塊錢,所以注定打賞的人不會很多,我 也就5,6個人左右。截止到昨晚凌晨,文章閱讀數為630人,打賞11人,總額30元。我要...