CF1732D1 Balance 题解
题目解释
输入一个 \(op\) 和 \(x\),\(op\) 有 \(2\) 种情况。
- \(op\) 为
+
,则将 \(x\) 加入到集合中。- \(op\) 为
?
,则找到一个最小的 \(k\),使 \(k \times x\) 不在合集中。
题目非常简单明了。
具体实现
这时,看到这句话:\(1 \le x \le 10^{18}\),所以不可能用数组实现。
这就涉及到了另一个数据结构:map
。
语法为:map<键的数据类型,值的数据类型>标识符;
访问方法和数组很像:标识符[键]
。
例子:
map<int,int>m;
m[7]=2;
printf("%d\n",m[7]);
知道这个之后就十分简单了。
可以直接用 map
进行标记。
然后 ?
的选项便可以直接用循环枚举。