題目描述
世界上的大佬太多了,菜雞們紛紛自閉並來到心理診所尋求**,心理診所的每乙個醫生有不同的開始上班時間,能力 a 和收費 c,能力為 a 的醫生可以治好自閉程度小於或等於 a 的菜雞。菜雞們都很窮,所以他們只想要能治好他們的最便宜的醫生,請你告訴他們當前能治好他們病的最便宜的醫生的**。(假設**在瞬間完成,同乙個醫生可以連續接待任意個客人)輸入
第一行乙個正整數 t(t<=5),表示資料的組數輸出每組資料第一行乙個正整數 n(n <= 10^5),表示接下來有 n 行。
接下來 n 行中,若第乙個數為 0,則接下來兩個正整數 a,c 表示有乙個能力為 a,收費為 c 的醫生上班了。若第乙個數為 1,則接下來有乙個正整數 b,表示有乙個自閉程度為 b 的菜雞來尋求**(1<=a,b,c <= 10^9)。
對每個尋求**的菜雞,輸出乙個整數表示**需要的花費,如果沒有醫生能治好他,輸出「-1」。樣例輸入
1
81 19
0 17 5
0 1 6
1 12
1 15
0 5 7
0 3 9
1 3
樣例輸出
-155
5
解題思路
這個題一開始做以遍歷菜雞的時候結果超時了,後來想想可不可以用醫生遍歷,仔細分析資料,其實我們發現當某乙個醫生的能力為a**為c時,他可以醫治比a小的全部菜雞,只是收費的問題而已,找到那個最小的,假設有(a,c) = 我們其實可以看成是(a,c) = ,因為(7,2)將比他小的收費全部重新整理,只要是比7小的菜雞收費全為2,所以我們看輸入的菜雞的值找乙個剛好可以醫治他的醫生即可,比如說b=1,我們只需要看a=2的c值就可以;b=6可以看a=7是的c值,因為之前已經被重新整理過了,裡面放置的肯定是最小的收費,在資料結構方面我用的是map容器,因為其預設可以排序,也可以根據鍵值查詢,其內部是乙個紅黑樹,時間大大的節省,可以放心使用,所以我用了map,另外乙個地方,這個要用scanf()和printf()用cin、cout可能會超時。參考**
#include #include #include #include #include #include #define max_len 100005
using namespace std;
int main()
ittemp = itpos;
//找到遍歷的前乙個醫生
for(ittemp--;ittemp!=doc.end();ittemp--)
else }}
else//菜雞查詢
else
}} }
return 0;
}
acm程式設計書中題目l
輸入乙個字串,將這個字串倒序輸出。運用string中的getline cin,字串名 進行輸入然後通過獲取字串長度,倒序輸出。include include include using namespace std intmain d 100 int a,i,j while cin a 輸入字串 fo...
《ACM程式設計》書中題目 L
題目簡要 這就是乙個倒序輸出的問題。在大多數語言中,文字從左到右書寫。但是,還有其他語言,其中文字從右到左讀取和寫入。作為向自動從左到右語言翻譯成從右到左語言和返回的程式的第一步,你要編寫乙個改變給定文字方向的程式。輸入規格 輸入包含幾個測試用例。第一行包含乙個指定測試用例數的整數。每個測試用例由一...
A 自閉的序列
給乙個長度為 n 的非負整數序列 a 求乙個a的長度在 l,r 之間的連續子串行,並且他們所有元素的平均值最大。你只要輸出這個最大值就可以了。第一行包含三個整數 n,l,r 接下來一行 n 個數,表示序列a。包括一行乙個實數表示答案,保留四位小數。樣例一input3 2 3 6 2 8output5...