CF1902
只要不是全 \(1\) 即可。
二分完成天数。
\(x\) 取差的 \(gcd\),\(a_{n+1}\) 见缝插针。
用一个 map
记录按原始操作序列,要走到 \((x,y)\) 的所有可能前缀。同时 \(px[i]\) 记录走了前 \(i\) 步到的 \(x\) 坐标,\(py[i]\) 记录走了前 \(i\) 步到的 \(y\) 坐标。
对于一次询问 \([l,r]\),先判断是否存在一个前缀的结尾在 \([1,l-1]\) 或 \([r,n]\)。(注意:这里是 \([r,n]\) 不是 \([r+1,n]\))如果存在,直接 Yes
。
否则,判断原序列能否在 \([l,r]\) 中走到 \((px[l-1]+(px[r]-x),py[l-1]+(py[r]-y))\)。如果能,就 Yes
;否则 No
。
记 \(s\) 的翻转为 \(s'\)。
\(C(a,b)=|a|+|B|-2\times LCP(a',b)\),\(LCP\) 是最长公共前缀。
则答案要求计算 \(2n\sum |s_i|-2\sum\sum LCP(s_i',s_j).\)
前半部分简单,考虑用 Trie 算后半部分。两个字符串的 \(LCP\),就是它们在 Trie 上的路径相交的长度 \(-1\)。