CSU- 神奇药水
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
- **********************************************************************/
来源: http://www.bubuko.com/infodetail-2943175.html