【题解】232D Fence
codeforces吧
全部回复
仅看楼主
level 10
wyl8899 楼主
大意:
对于给定的a[1..n],定义区间[s,t]和[x,y]"匹配"当且仅当下列条件同时满足:
1. t-s=y-x,即长度相同。
3. t<x或s>y,即两区间没有交。
2. 对任0<=i<=t-s,有a[s]+a[x]=a[s+i]+a[x+i]。
现给出a[1..n]和Q个询问(x,y),求与[x,y]匹配的区间的个数。
2013年01月22日 13点01分 1
level 10
wyl8899 楼主
容易想到令d[i]=a[i+1]-a[i],然后[s,t]和[x,y]匹配的第三个条件可以重写成:
对任0<=i<t-s,d[s+i]+d[t+i]=0。
如果做法还不够显然的话,我们令d'[i]=-d[i],然后将d[]和d'[]分别视为字符串,问题变成:
给出串A,B,Q个询问(x,y),问A[x..y]在B中出现了多少次。
注意,出现的下标序列和[x-1,y+1]不能有交。
(请留心一下,这里是[x-1,y+1]而不是[x,y],原因是显然的。)
(当然了,d[]和d'[]要一起进行一次离散化。)
2013年01月22日 13点01分 2
level 1
orz
2016年01月11日 08点01分 4
1