Gravatar
lihaoze
积分:1314
提交:352 / 742

这一题一开始我是用dfs选数,但是调试起来太麻烦了,于是换了一个思路,每次选出来 $n-1$ 个符号,最后check一下。

check 函数的策略是每遇到一个不为 空格 的字符就把当前的数 $now$ 加进变量 $x$ 中,然后 $now$ 初始化成当前字符的下一个数字(也就是 $i + 2$),接着把这个字符用 $sig$ 存起来作为下一个数的符号,如果遇到的字符是 空格 就把 $now$ 进一位加上 空格 后面的数,最后如果 $x$ 的值为 $0$,那么就符合要求。因为我的 $chosen$ 数组是从 $0$ 开始的,而 $1$ 一开始就加进了 $now$ 中,所以 "字符后面的那个数字" 对应的下标就是 $i + 2$。这个下标的问题花了我半天时间调试。

答案的输出的话其实没有那么麻烦,只需要把答案的字符串存起来排一下序就可以了,因为 std::string 本来就可以比较字典序的大小


题目697  [USACO 2.3.3]零数列 AAAAAAA      5      评论
2022-03-19 23:00:47    
Gravatar
lihaoze
积分:1314
提交:352 / 742

总共只有八种情况:

1. 不按

2. 四个按钮分别按

3. 按1+4, 2+4 或 3+4

容易发现,前三个按钮任意两个同时按等价于按另外的第三个按钮,三个都按相当于没按

因此,只需要特判 $C \le 2$ 的情况就行了,其中 $C = 2$ 的情况比较特殊,因为第四个按钮不能被两个按钮转化而成

而对于 $C > 2$ 的情况,因为总有两个按钮可以转化成另外一个按钮,最后还是会回到这八种情况,所以枚举所有情况,判断与情况符合不符合就可以了

(其实就是打表)


题目695  [USACO 2.2] 派对灯 AAAAAAAA      4      评论
2022-03-16 23:54:09