CSU->1974: 神奇藥水

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章