T1:优化
枚举中心所在位置,每次贪心找到左右最近的一个相同字符移动。spa
能够用单调指针扫。指针
时间复杂度$O(n^2)$。it
T2:
两个数的乘积为平方数,那么这两个数各自去掉平方因子后相等。map
去掉平方因子后能够用map统计答案。im
对于普通的$O(\sqrt{p})$试除法,复杂度不容许,就算将全部的质数筛出后枚举质数也会超时。统计
筛出质数是确定要的,考虑优化试除。移动
咱们只关心平方因子,因此能够用$O(p^{\frac{1}{3}})$的试除。时间
先用小于$p^{\frac{1}{3}}$的质数筛一遍,那么剩下的数不会含有小于$p^{\frac{1}{3}}$的质因子。字符
而后就只有两种状况,即一个大质数和一个质数的平方。
开根再乘判一下就行。
时间复杂度$O(np^{\frac{1}{3}})$。
T3:
d维空间中两点之间的路径数:
设两个点每一维的坐标差为$a_i$,则$ans=\frac{(\sum \limits_{i=1}^d a_i)!}{\prod \limits_{i=1}^d a_i!}$。
设$dp[i]$表示由起点到$i$的方案数,$S$为能到达$i$的点集。
$dp[1]=-1$
$dp[i]=-\sum \limits_{j \in S}dp[j]*calc(j,i)$
其实就是容斥。
时间复杂度$O(n^2d)$。