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)$。