1. 程式人生 > >UR 6 破解密碼

UR 6 破解密碼

破解密碼 HA div ans \n namespace color ++ name

SOL :

我們發現 ha[i]=ha[i-1]*26-head*26^(len+1)+head

head是指當前把這玩意扔到隊尾的東東。就好了。

還有就是考慮沒有逆元的情況。

#include<bits/stdc++.h>
#define LL long long 
#define N 100007
using namespace std;
int mo,n,h[N],t;
char ans[N];
LL qsm(LL x,LL y=mo-2) {
    static LL anw;
    for (anw=1,x=x%mo;y;y=y>>1
,x=x*x%mo) if (y&1) anw=anw*x%mo; return anw; } int main () { scanf("%d %d\n",&n,&mo); for (int i=0;i<n;i++) scanf("%d",h+i); t=qsm(qsm(26,n)-1+mo); if (t) { for(int t2,j,i=0;i<n;i++) { j=(i+1)%n; t2=((LL)h[i]*26%mo-h[j]+mo)%mo; ans[i]
=(LL)t*t2%mo + a; } printf("%s",ans); } else { int t1=h[0]; for(int i=n-1;~i;i--) ans[i]=h[0]%26+a,h[0]/=26; printf("%s",ans); } }

UR 6 破解密碼