花匠(codevs 3289)題解

2022-08-30 12:12:09 字數 1113 閱讀 6391

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。

具體而言,棟棟的花的高度可以看成一列整數h_1, h_2, … , h_n。設當一部分花被移走後,剩下的花的高度依次為g_1, g_2, … , g_m,則棟棟希望下面兩個條件中至少有乙個滿足:

條件 a:對於所有的1g_2i-1,且g_2i > g_2i+1; 

條件 b:對於所有的1

注意上面兩個條件在m = 1時同時滿足,當m > 1時最多有乙個能滿足。

請問,棟棟最多能將多少株花留在原地。

5 5 3 2 1 2

3本題為noip2013提高組day2第二題,本人認為該題應該是第一題的難度……之所以放在第二題,也許是因為條件寫得醜了點怕別人看不清。看清條件這道題就很簡單了。

這個條件的意思就是讓你找轉折點的數量即g(i-1)g(i+1)或g(i-1)>gi

首先可以肯定的是,當花的數目為1的時候,可以直接輸出1。首尾兩株花都肯定是可以留下的,因此,當花的數目大於等於2時,我們可以將答案初始化為2,然後加上轉折點的數目即可,**沒超過25行……

var a:array[0..100001] of

longint;

w,n,i,ans:longint;

begin

readln(n);

a[0]:=-maxlongint;

for i:=1

to n do

begin

inc(w);

read(a[w]);

if a[w]=a[w-1] then

dec(w);

end;

if w=1

then

begin

writeln(1);

halt;

end; ans:=2;

for i:=2

to w-1

doif ((a[i]>a[i-1])and(a[i]>a[i+1]))or((a[i]1])and(a[i]1])) then

inc(ans);

writeln(ans);

end.

題解 bzoj3289 Mato的檔案管理

mato同學從各路神犇以各種方式 你們懂的 收集了許多資料,這些資料一共有n份,每份有乙個大小和乙個編號。為了防止他人偷拷,這些資料都是加密過的,只能用mato自己寫的程式才能訪問。mato每天隨機選乙個區間 l,r 他今天就看編號在此區間內的這些資料。mato有乙個習慣,他總是從檔案大小從小到大看...

NOIP2013花匠超多方法的題解

原題見洛谷 首先介紹一種我在做題的時候學到的一種空間複雜度為o 1 的解法 首先使用f1,f2分別記錄兩種不同的序列。就是一種為兩邊高中間低和一種為中間高兩邊低的序列。f1,f2的初始值都設成1 我們可以易證選擇了1第一盆其結果一定不會變差 手動滑稽 用x來記錄上一盆,h來記錄當前盆滿足一下幾個條件...

CodeVS 1032題解報告

codevs 1032 題解報告 dfs 數論 剪枝tianmaxingkong 問題 question 數學家們喜歡各種型別的有奇怪特性的數。例如,他們認為945是乙個有趣的數,因為它是第乙個所有約數之和大於本身的奇數。為了幫助他們尋找有趣的數,你將寫乙個程式 掃瞄一定範圍內的數,並確定在此範圍內...