Luogu 選擇客棧

2022-04-30 02:18:08 字數 746 閱讀 7568

思路就是,從1到n列舉,輸入color和price的值,我們需要記錄乙個距離第二個客棧最近的咖啡廳價錢合理的客棧位置,用乙個now變數記錄。

開三個輔助陣列,last[i]表示最後乙個以i為顏色的客棧的位置,cnt[i]表示以i為顏色的客棧總數,sum[i]可以看作是乙個臨時陣列,用來儲存當前的方案數。

可以這麼想,當前列舉到乙個客棧i,這個i是第二個客棧,那麼顯然第乙個客棧一定在第二個客棧之前,編號必定是0~i-1之間的乙個數。如果我發現列舉的時候在某乙個客棧前面有乙個價錢合理的咖啡廳,那麼在這之前的任何乙個同色客棧都是第乙個客棧可以選的,那麼統計一下數量,這就是當前的方案數。

然後更新last陣列,更新ans,讓cnt[color]++,這樣從左到右地推過來就好了。

這個解法簡化於暴力演算法,暴力演算法要迴圈三層,一層1客棧,二層2客棧,3層合理的位置,這樣做顯然不行,而我們做的就是去優化掉兩層,而是從列舉2客棧出發推出1客棧的位置和所有可行方案,所以這樣做是正確的。最後輸出即可。

#include#include 

const

int n = 200100

;#define gc getchar() inline

intread()

intn,k,p,col,mon,now,ans;

intnum[n],s[n],c[n];

intmain()

printf("%d

", ans);

return0;

}

2011 選擇客棧

麗江河邊有n 家很有特色的客棧,客棧按照其位置順序從 1 到n 編號。每家客棧都按照某一種色調進行裝飾 總共 k 種,用整數 0 k 1 表示 且每家客棧都設有一家咖啡店,每家咖啡店均有各自的最低消費。兩位遊客一起去麗江旅遊,他們喜歡相同的色調,又想嘗試兩個不同的客棧,因此決定分別住在色調相同的兩家...

問題 C 選擇客棧

時間限制 1 sec 記憶體限制 128 mb 提交 8 解決 7 提交 狀態 討論版 命題人 add wjl edit testdata 麗江河邊有 n 家很有特色的客棧,客棧按照其位置順序從 1 到 n 編號。每家客棧都按照某一種色調進行裝飾 總共 k 種,用整數 0 k 1 表示 且每家客棧都...

VIJOS 1737 選擇客棧

麗江河邊有n家很有特色的客棧,客棧按照其位置順序從1到n編號。每家客棧都按照某一種色調進行裝飾 總共k種,用整數0 k 1表示 且每家客棧都設有一家咖啡店,每家咖啡店均有各自的最低消費。兩位遊客一起去麗江旅遊,他們喜歡相同的色調,又想嘗試兩個不同的客棧,因此決定分別住在色調相同的兩家客棧中。晚上,他...