码迷,mamicode.com
首页 > 其他好文 > 详细

UR 6 破解密码

时间:2018-04-19 19:35:53      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:main   class   #define   turn   printf   def   ace   stat   its   

 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 破解密码

标签:main   class   #define   turn   printf   def   ace   stat   its   

原文地址:https://www.cnblogs.com/rrsb/p/8885508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!