笔试助攻题(思路)

题意:

给你一个长度为1e5的串,包含数字0-9和?

?可以替换成任意数字

要求保证任意相邻的10个数均不相同

问有多少种方案?

思路:

乍一看还像个dp什么的,每个位置跟前后9个都有关系,越想越复杂

然而仔细一想发现,每隔10个数的数字是相同的

也就是说串中的1,11,21,,,这些位置的数字都是相同的

就是这个突破口,这题就变成了大水题

只需要开一个10的f数组,赋初值-1,然后对着串扫一遍

如果当前位置p是数字,就看f[p%10]是否为-1,如果是-1,则改为当前值

如果不为-1,则必须与当前值相等,否则输出0

然后再判断f数组中不为-1的位置的所有的数字必须不同,否则输出0

然后还要特判一下小于10的串,如果有解则为A(10-数字个数,问号个数)

大于等于10的串的解就是f数组里-1个数的阶乘

代码就不写了~

posted on 2016-10-22 20:22  恶devil魔  阅读(281)  评论(0编辑  收藏  举报

导航