题目链接:https://codeforces.com/contest/1169/problem/E
题意:给$n$个数$a_i$,$m$次询问,要求每次询问下标$x$的数能否一直与到下标为$y$的数,从$x$出发$a_x$与的每一个中间数$a_k$不能为$0$,问是否存在这样一个序列,能一直与到下标为$y$的数。
考虑DP,$f(i,j)$表示从$i$出发能走到$i$之后的最近的一个数的下标$p$,并且这两个数都有数位$j$. 于是我们可以枚举另一个数位$k$作为桥梁,看看是否可以连接$i$到$p$.
显然,我们需要维护一个$last_k$,表示第$i$个数后边的最近的数,并且这个数包括$k$位的下标。于是递推式为:
$$
f(i,j)=min(f(i,j),f(last(k),j))
$$
更新的时候实际上枚举的是是否可以做桥梁的$i$,并且倒序更新,这样才能保证之前的状态都已经计算过。
查询的时候可以询问$a_y$是否存在数位$i$,并且$f(x,i)$这个下标是否在$x$和$y$之间,如果在的话,这个数可以作为桥梁。
1 |
|