UOJ 74 UR 6 破解密碼(數學相關)

2021-07-26 18:42:27 字數 949 閱讀 3091

傳送門

其實這道題就是給了你乙個串的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 上所有邊權乘積為完全平方數的路徑有多少條 看到 所有邊權乘積為完全平方數 想到完全平方數的特殊性 就是分解質因數後 質因數指數都為偶數 然後就想到分解邊權質因數 判質路徑邊權奇偶性 後者由於...