2019 Multi-University,Nowcoder Day 4

From EOJ Wiki
Jump to navigation Jump to search

Problem A

Solved by Weaver_zhu. 01:43:34 (+)

Problem B

Upsolved by Weaver_zhu. (-5)

Problem C

Solved by Kilo_5723. 03:23:47 (+2)

Problem D

Solved by Xiejiadong. 01:23:59 (+)

题意:求最小数量的三的倍数的数,使得他们位或的结果是 $a$ 。

题解:大力分类讨论。我们可以发现二进制下,每一位模 $3$ 是 $1,2,1,2,\cdots $

我们不妨从总和下手:

  • 总和是 $3$ 的倍数,直接输出;
  • 总和是 $3$ 的倍数多 $1$ ,如果有 $1$ 去掉 $1$ 或者去掉两个 $2$ ,然后去掉的数考虑用 $1,1$ 或者 $2$ 去组成三的倍数,可以证明一定存在;
  • 总和是 $3$ 的倍数多 $2$ ,如果有 $2$ 去掉 $2$ 或者去掉两个 $1$ ,然后去掉的数考虑用 $2,2$ 或者 $1$ 去组成三的倍数,可以证明一定存在。

所以发现其实最多只有两个数就能搞出来了。

Problem E

Solved by Kilo_5723. 04:02:11 (+1)

Problem F

Unsolved.

Problem G

Unsolved.

Problem H

Unsolved.

Problem I

Solved by Xiejiadong. 02:47:24 (+1)

Problem J

Solved by Kilo_5723. 01:39:30 (+3)

Problem K

Solved by Xiejiadong. 00:19:37 (+)

题意:求字符串的子串中有多少 $300$ 的倍数。

题解:$300$ 的倍数就是末尾有两个 $0$ ,前面的数字和是 $3$ 的倍数就好了。

我们把当前数字后面跟着两个 $0$ 的位置称为有效的结束位置,把所有的有效结束位置的前缀和模 $3$ 扔进 map 。

然后枚举开头,判断有多少同值的有效结尾就好了。

还需要特判一个 $0$ 和两个连续 $0$ 的情况。