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