題目大意:
麗江河邊有 n 家很有特色的客棧,客棧按照其位置順序從1 到n 編號。每家客棧都按照
某一種色調進行裝飾(總共k 種,用整數0 ~ k-1 表示),且每家客棧都設有一家咖啡店,每
家咖啡店均有各自的最低消費。
兩位遊客一起去麗江旅遊,他們喜歡相同的色調,又想嘗試兩個不同的客棧,因此決定
分別住在色調相同的兩家客棧中。晚上,他們打算選擇一家咖啡店喝咖啡,要求咖啡店位於
兩人住的兩家客棧之間(包括他們住的客棧),且咖啡店的最低消費不超過p。
他們想知道總共有多少種選擇住宿的方案,保證晚上可以找到一家最低消費不超過p
元的咖啡店小聚。
解法:
如果一家編號為 i 咖啡店的最低消費大於p,則記flag[ i ]=1;否則,flag[ i ]=0.
考慮到計算滿足要求的對數不太容易, 從反面思考:
從1到n掃瞄出flag值等於1的連續客棧(在此區間內找到的客棧均為不滿足要求的方案),在掃瞄時用cnt[j]記錄當前顏色為j的客棧出現次數
cnt[j]++;
count+=(cnt [j]-1); (新的客棧可以與當前任意顏色相同客棧組合)
可以數出顏色相同但不滿足要求的客棧對數。
答案ans=sum-count.(sum為所有顏色相同的客棧對數)
即為滿足要求的客棧對數
**:
#include#include#includeusing namespace std;
bool flag[200010];
int cnt[100],count,sum;
int main()
for(int i=1;i<=n;i++)
cnt[col[i]]++;
count+=(cnt[col[i]]-1);
} memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;i++)
cout<
口胡 NOIP2011DAY1 選擇客棧
乙個長度為 n 的區間,每個位置上有顏色 ci 以及代價 vi,現在問有多少個區間 l,r 滿足 cl cr 且 l i r 使得v i p 我們只考慮每乙個點作為左端點時對答案的貢獻,我們令ne xti 表示在i左邊,離i最近,且vn exti p的那個端點,可以為i本身 那麼i這個端點對答案的貢...
選擇客棧(noip2011 day1 t2)
題目描述 麗江河邊有 n 家很有特色的客棧,客棧按照其位置順序從 1 到 nn n 編號。每家客棧都按照某一種色調進行裝飾 總共 k 種,用整數 0 k 1 表示 且每家客棧都設有一家咖啡店,每家咖啡店均有各自的最低消費。兩位遊客一起去麗江旅遊,他們喜歡相同的色調,又想嘗試兩個不同的客棧,因此決定分...
NOIP2011 提高組Day 1題解
總結 第一天的三道題除了第三題 長度有點超過我的接受範圍之外,一二題難度還是比較適中滴,只可惜第二題我打的暴力忘了小小的優化一下,結果沒得全分,有點難過了。這道題的思路就是輸入過後倒著尋找符合條件的地毯,因為越後放的地毯在越上面 這道題我們先列舉第二個客棧的位置,然後去倒推第乙個客棧的位置。當時做這...