计算几何 + AC 自动机.
考虑如果给出两个长度相同的点列,如何判断它们能否匹配.
若点数 $=2$ ,则通过平移,旋转,放缩一定可以匹配.
若点数 $>2$ ,先不考虑翻转,只考虑平移,旋转,放缩这三种操作.
如果任意两条相邻的边的边长之比和夹角都相等,就可以匹配.
为了避免精度问题,边长比可以用边长平方比来表示,夹角可以用叉积与点积之比来表示.
将分子分母,化成既约分数保存,注意夹角比值的分子分母都要保留符号.
将这些信息离散化,就变成了数字串的匹配,用 AC 自动机来计算匹配次数.
再考虑翻转操作,若一个点列不是所有点共线,则它翻转后不能和原来的点列通过平移,旋转,放缩匹配.
将它翻转后再做一次上面的匹配.
1 | //%std |