題目
這題挺簡單的,沒必要用陣列
需要判斷的是低窪地的數量
通過對題目中圖進行分析,顯然可以發現低窪地的定義:
若陣列中存在乙個數值相同的連續區間,這個區間端點外相鄰兩點的數值都大於該區間的數值,則該區間為低窪地
有的朋友也許會覺得這個定義很麻煩,但有時候,定義是必須的
比如這題,如果單純地將低窪地理解為中間都比周圍低,那麼對於這組資料:
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 寫法有很多種,像我這種蒟蒻就只會寫這一種...