CSU-1974 神奇藥水
CSU-1974 神奇藥水
Description
? 對於csuxushu來說,能夠在CSU(California State University)組織2017年的ACM暑期集訓讓他感到十分榮幸。 csuxushu是一名充滿夢想的程序員,因此他也希望來參加暑期集訓的ACM萌新們和他一樣懷揣著書寫CSU-ACM歷史的夢想。 一個偶然的機會,他在機房的某個角落得到了一本來自遠古神犇的藥水配方秘籍。秘籍上記載了許多AC藥水配方,每一種藥水都需要用兩種原料 <勤奮,聰明> 按一定的比例配置而成。
“只要萌新喝下這些藥水,他們的實力將有質的提升!”
? ——《遠古AC藥水秘籍》
? 此刻萌新們正在機房內和題目奮戰,耳邊的WA聲不絕於耳。此情此景,csuxushu下定決心要為萌新們配置這些藥水。 但是這兩種原料市面上並不出售,因此只能由一些已有藥水混合而成。為此他四處搜尋,機房不時放進新的藥水和運出藥水,並且在機房內的每種藥水量都保證足夠多。作為全CSU最聰明的程序員,對於每一個神奇藥水配方,你能告訴他能否配成嗎?
Input
多組數據。
對於每組數據,第一行一個整數N(1?<?=N?<?=105),代表操作數。
接下來N行,每行一個三元組(K,?X,?Y) ,XX 和 YY 分別代表勤奮和聰明兩種原料在藥水中的濃度,其中 XX% + YY% = 100% 。
K?=?0 :詢問是否可以配置神奇藥水(X,?Y) ;
K?=?1 :新增一種原料藥水(X,?Y) ;
K?=??1 :刪除所有原料藥水(X,?Y) ,如果沒有這種藥水則忽略此操作;
Output
對於每個K?=?0 的詢問輸出一行,Yes或No。
Sample Input
6 1 65.00 35.00 0 93.58 6.42 1 44.64 55.36 1 68.27 31.73 0 54.36 45.64 0 46.04 53.96
Sample Output
No
Yes
Yes
set模擬一下即可,因為x + y = 1,所以我們只需考慮x。如果是1即insert(x),-1就clear(), 0就看看set的隊頭元素是否比x小,隊尾元素是否比x大,都滿足輸出yes否則輸出no
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { int n; set<int> s1, s2; while (scanf("%d", &n) != EOF) { s1.clear(); s2.clear(); for (int i = 1; i <= n; i++) { int q; scanf("%d", &q); double x1, y1; scanf("%lf%lf", &x1, &y1); int x = x1 * 100, y = y1 * 100; switch (q) { case 1: s1.insert(x); s2.insert(y); break; case -1: s1.erase(x); s2.erase(y); break; case 0: if (s1.empty()) { printf("No\n"); break; } else if (*s1.begin() <= x && *(--s1.end()) >= x){ printf("Yes\n"); break; } else { printf("No\n"); break; } } } } return 0; } /********************************************************************** Problem: 1974 User: Artoriax Language: C++ Result: AC Time:160 ms Memory:2292 kb **********************************************************************/
CSU-1974 神奇藥水