1974: 神奇藥水
Time Limit: 1 Sec Memory Limit: 256 Mb
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
Hint
Source
2017年7月月賽
題目鏈接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1974
題解:本題我本來是使用兩個set容器來解的,但一直沒過,看了下別人博客的題解才明白,原來可以只看一個x值或y值就好了,因爲x*100+y*100=100.這題想通了還是容易的。
AC代碼:
#include <iostream>
#include <set>
using namespace std;
set<int> s;
set<int>::iterator it;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int k;
double x,y;
s.clear();
for(int i=0;i<n;i++)
{
scanf("%d%lf%lf",&k,&x,&y);
int a=(int)(x*100);
if(k==1)
s.insert(a);
else if(k==-1)
s.erase(a);
else
{
if(s.empty())
{
printf("No\n");
}
else if(*s.begin()<=a&&(*--s.end())>=a)
{
printf("Yes\n");
}
else
printf("No\n");
}
}
}
return 0;
}