Reading

CodeForces 1562B Scenes From a Memory


Fanyi Pu

有 T(1≤T≤103) 组数据,每组给一个长度为 k(1≤k≤50) 的十进制正整数 n,其中 n 在十进制下不存在 0(同样不存在前导 0),让你求一个整数 m,使得 m 在十进制下为 n 在十进制下的子序列,且 m 为非素数(1 也是非素数)。子序列不要求连续。

窝萌考虑尽量批量解决一些能解决数。

考虑到如果一个数字含有 1,4,6,8,9,那么这个数只要保留这一位即可,而其余情况均需保留两位。

如果没有这些数,也就是只有 2,3,5,7,如果存在两个数字相同,那么只要保留这两个数字就一定被 11 整除,于是位数大于等于 5 位的数字都解决了。

然后考虑到只要 2 和 7、5 和 7 在一起,那么取这两个数就一定被 3 整除,于是 4 位数也解决了。

然后如果 2 和 5 不放在第一位,那么就可以整出一个尾数是 2 或尾数 5 的两位数,分别被 5 和 2 整除。

也就是说现在窝萌还不能解决的应该是个三位数,又因为 2 和 5 至少会有一个数被选进这个三位数(2,3,5,7 四个数里选三个嘛),所以 7 就不能来了,这样 2,3,5 一定要进场,但是 2 和 5 又都要在开头,所以是不可能的。

于是窝萌发现其实两位及以上的数字窝萌都只需要上面说的 4 个特判就可以了。

总结一下,先判有没有 1,4,6,8,9,如果没有看有没有同时出现 2 和 7、5 和 7,如果还没有,那我看一下有没有不放在开头的 2 和 5。这样就能覆盖到所有可行的数字了。

Cite this post

@misc{pu2021oiicpccodeforcescf1562b,
  author = {Pu, Fanyi},
  title  = {CodeForces 1562B Scenes From a Memory},
  year   = {2021},
  month  = {8},
  url    = {https://pufanyi.com/blog/oi-icpc/codeforces/cf1562b}
}