codeforces 906C
introduction
这道题要充分理解题意和输入的意思。
method
可以用集合的思想的做
集合
\(A\)表示可行的字母,初始是
\(26\)个字母
集合
\(B\)表示每一句操作的字符的集合
集合
\(C\)表示猜过的字符的集合
每读入一个动作,
如果
\(|A|>1\)我们做如下操作:
\[ A= \begin{cases} A\cap B, & \text{if $op$ is !} \\ A\setminus B, & \text{if $op$ is .}\\ update \ C, A\setminus C,&\text{if $op$ is ?} \end{cases}\\ op \in \{!, . , ?\} \] 如果
\(|A|=1\):
统计多余的次数
tips
- set的初始化方法
- set_intersection和set_difference的用法
- 关闭cin和stdio的同步
- cin接受行末的\n
Q&A
conclusion
做这道题学到了很多新的知识,尝试使用STL中的set来解决问题。
如果
WA是因为思路有问题,那么可以查看别人
AC的代码的测试数据,可以作为判断问题的依据。为
codeforces打call。
reference
code
#include #include #include #include #include #include #include #include #include