題解 P1317 低窪地

2022-03-28 20:29:00 字數 1569 閱讀 6555

題目

這題挺簡單的,沒必要用陣列

需要判斷的是低窪地的數量

通過對題目中圖進行分析,顯然可以發現低窪地的定義:

若陣列中存在乙個數值相同的連續區間,這個區間端點外相鄰兩點的數值都大於該區間的數值,則該區間為低窪地

有的朋友也許會覺得這個定義很麻煩,但有時候,定義是必須的

比如這題,如果單純地將低窪地理解為中間都比周圍低,那麼對於這組資料:

3 2 1 2 1 2 3
就會被視為乙個低窪地,而不是兩個了

我們回來。可以發現,對於乙個數值相同的區間顯得有些無趣,畢竟我們不需要知道區間長度,只需要這個區間的數值

所以,對於相同的相鄰讀入,可以直接存為乙個

這樣,我們對於我們儲存的資料,低窪地的定義就不同了:

若陣列中存在乙個數,它既小於它的前乙個數,又小於它後乙個數,則這個數是低窪地

我們需要的是低窪地的數量,所以一邊讀入,一邊處理即可

具體細節可以參考本蒟蒻的**

還有乙個細節,第乙個點和最後乙個點一定不是低窪地,可以考慮初始化為上坡,這個可以在本蒟蒻的**中體現

那本蒟蒻就放 我碼風極醜的 **了

#includeusing namespace std;

int main()

#else

inline char gc(),*p1=s,*p2=s;

return (p1==p2)&&(p2=(p1=s)+fread(s,1,1<<20,stdin),p1==p2)?eof:*(p1++);

}#endif

inline i64 read()

char output_ans[1<<20|1],*output_cur=output_ans;

inline void output()

inline void print(char c)

inline void print(i64 ans);

if(output_cur-output_ans+sprintf(buf,"%lld",ans)>>20) output();

output_cur+=sprintf(output_cur,"%lld",ans);

}inline void print(i32 ans)

inline void print(u64 ans);

if(output_cur-output_ans+sprintf(buf,"%llu",ans)>>20) output();

output_cur+=sprintf(output_cur,"%llu",ans);

}inline void print(u32 ans)

}using namespace io;

int main(){

register i32 d_t=read(),d_f=-2,d_m=-1,d_l,d_cnt=0;

while(d_t--){

d_l=read();

if(d_l==d_m) continue;

if(d_m最後安利一下 本蒟蒻的部落格

python洛谷P1317 低窪地

n int input groundhighlist list map int input split i 1j i 1count 0while i len groundhighlist 1 頭尾為0且不可能為低窪地 while j len groundhighlist and groundhigh...

題解 P2058 海港

我們注意到資料範圍,發現二維陣列並不可取,但是我們又注意到 k i 3 105 ki 3 10 5,所以採取一種新的思想 將所有人都讀在乙個一維陣列裡面 使用乙個佇列 q q 來儲存第 i role presentation i i艘船上人數的範圍,即 q q 儲存的是兩個數 l r role pr...

題解 P4995 跳跳!

說實話這個題我一開始想了好久dfs超時得了30可能因為我太弱了 吃得苦中苦方為人上人現在終於a了當然體會更多 1 首先 這是個真的真的貪心題 貪心思路就是每次都從未跳過得最高的 或最低的 跳到最低處 最高處 這樣差值才最大 2 知道貪心思路了就要寫好 qaq 寫法有很多種,像我這種蒟蒻就只會寫這一種...