Luogu P1311 選擇客棧 字首和

2022-05-20 02:35:04 字數 1551 閱讀 6111

p1311 選擇客棧

麗江河邊有\(n\)家很有特色的客棧,客棧按照其位置順序從\(1\)到\(n\)編號。每家客棧都按照某一種色調進行裝飾(總共\(k\)種,用整數\(0\)~\(k-1\)表示),且每家客棧都設有一家咖啡店,每家咖啡店均有各自的最低消費。

兩位遊客一起去麗江旅遊,他們喜歡相同的色調,又想嘗試兩個不同的客棧,因此決定分別住在色調相同的兩家客棧中。晚上,他們打算選擇一家咖啡店喝咖啡,要求咖啡店位於兩人住的兩家客棧之間(包括他們住的客棧),且咖啡店的最低消費不超過\(p\)。

他們想知道總共有多少種選擇住宿的方案,保證晚上可以找到一家最低消費不超過\(p\)元的咖啡店小聚。

共\(n+1\)行。

第一行三個整數\(n,k,p\),每兩個整數之間用乙個空格隔開,分別表示客棧的個數,色調的數目和能接受的最低消費的最高值;

接下來的\(n\)行,第\(i+1\)行兩個整數,之間用乙個空格隔開,分別表示\(i\)號客棧的裝飾色調和\(i\)號客棧的咖啡店的最低消費。

乙個整數,表示可選的住宿方案的總數。

5 2 3

0 51 3

0 21 4

1 5

3
【輸入輸出樣例說明】

\(2\)人要住同樣色調的客棧,所有可選的住宿方案包括:住客棧①③,②④,②⑤,④⑤,但是若選擇住\(4\)、\(5\)號客棧的話,\(4\)、\(5\)號客棧之間的咖啡店的最低消費是\(4\),而兩人能承受的最低消費是\(3\)元,所以不滿足要求。因此只有前\(3\)種方案可選。

【資料範圍】

對於\(30 \%\)的資料,有\(n \leq 100\);

對於\(50 \%\)的資料,有\(n \leq 1,000\);

對於\(100 \%\)的資料,有\(2 \leq n \leq 200,000, \ 0最低消費\(\leq 100\)。

這題要倒著統計,做出來了我教你。 --mercury

然後他做了一晚上沒出來\(2333\)。

首先,假設有\(k=1\),那麼怎麼做呢?對於第\(u\)個客棧,若其前面最近的一家滿足要求的咖啡店的編號為\(v\),那麼\(v\)之前的所有客棧都可與\(u\)一起產生貢獻,所以第\(u\)個客棧對答案的貢獻為\(u-v\)。

如果\(k \neq 1\),那麼我們還要統計第\(u\)個客棧之前的和它顏色相同的客棧一共有多少家,這個可以用字首和來完成。最後時間複雜度為\(o(n)\)。

#includeusing namespace std;

typedef long long ll;

const ll n=2e5+5;

ll n,k,p,near,sum[55][n],ans;

ll read()

int main()

printf("%lld",ans);

return 0;

}

luoguP1311 選擇客棧

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

P1311選擇客棧

這是2011年提高組d1t2,是乙個綠色的模擬題,不出所料,沒寫出 來。首先輸入n個客棧的顏色和最低消費,然後根據 同顏色但不是乙個客棧 以及 兩個客棧之間必須有乙個的最低消費 p 確定出最大的住宿方案數。然後我首先想到了暴力法 for 第乙個客棧 顯然2e5肯定超時 當然賽場上可以這麼暴力去寫 還...

P1311 選擇客棧

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