傳送門
其實這道題就是給了你乙個串的n個hash值然後讓你還原原串
首先乙個非常顯然的式子 h(
i+1)
≡(h(
i)−c
(i)∗
26n−1
)∗26+
c(i)
(modp)
然後化簡一下 c(
i)=h
(i+1
)−h(
i)1−
26n這樣就可以根據h來推出c了
可是這樣還有乙個問題
考慮26n≡
1(modp
) 的情況,此時若h(
i+1)
≡h(i
)∗26(
modp
) 成立,那麼所有的字母都符合要求,但是又不一定能滿足h(0)的計算
這個時候只需要特判掉就行了,把h(0)按照26進製展開
#include
#include
#include
#include
#include
using namespace std;
#define n 100005
int n,mod,mi,inv;
int h[n];
char s[n];
int fast_pow(int a,int p)
int main()
inv=fast_pow(((1-mi)%mod+mod)%mod,mod-2);
h[n]=h[0];
for (int i=0;is[i]=((h[i+1]-h[i]*26ll
%mod)%mod+mod)%mod
*1ll
*inv
%mod
%26+'a';
for (int i=0;is[i]);
}
UOJ 74 UR 6 破解密碼
題目中,將字串 s 的第乙個字元移到末尾,其他字元向前移動乙個位置,f s 就從 hi 變成了 hi 1。我們分析一下這個過程 假設第乙個字元為 c,hi 26 n 1 c 26 c hi 1 26 hi hi 1 26 n 1 c c 26 hi hi 1 inv 26 n 1 那麼每乙個 c 都...
UOJ 74 UR 6 破解密碼
uoj 發現這個過程是乙個字串雜湊的過程。把第一位單獨拿出來考慮,假設這個串是 p s 旋轉後變成了 s p 其雜湊值分別是 p 26 hash s 和 hash s 26 p 那麼 h i 26 h i 1 p 26 p 那麼這裡顯然可以直接把 p 給解出來。這樣子就可以還原出每一位了。注意到特殊...
UOJ 192 UR 14 最強跳蚤
題目鏈結 暑期課第二天 樹上問題高階 具體內容看筆記部落格吧 題意n個節點的樹t 邊有邊權w 求滿足 u,v 上所有邊權乘積為完全平方數的路徑有多少條 看到 所有邊權乘積為完全平方數 想到完全平方數的特殊性 就是分解質因數後 質因數指數都為偶數 然後就想到分解邊權質因數 判質路徑邊權奇偶性 後者由於...