模拟测试107

T1:

  枚举中心所在位置,每次贪心找到左右最近的一个相同字符移动。

  可以用单调指针扫。

  时间复杂度$O(n^2)$。

T2:
  两个数的乘积为平方数,那么这两个数各自去掉平方因子后相等。

  去掉平方因子后可以用map统计答案。

  对于普通的$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)$。

原文地址:https://www.cnblogs.com/hz-Rockstar/p/11832985.html