笔试助攻题(思路)
题意:
给你一个长度为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个数的阶乘
代码就不写了~