题面

$ solution: $

这一题重点不在字符串加密,而是我们最后的求值: $ K^{s}\mod M $ ( $ s\leq36^{100000} $ )

而我们发现它的指数十分巨大,但众所周知的指数不能直接取模,所以我们进行一些优化。

首先,我们 $ O(n) $ 走一遍字符串,求出它加密所需要的进制 $ p $ ,然后我们将 $ K^s $ 进行数位处理,发现我们最终要求的值就是(其中 $ i $ 是我们 $ s $ 的位数):

$ \prod K^{a[i]\times p^{i-1}} $

然后我们发现我们的 $ p^{i-1} $ 部分仍然有可能溢出,但是如果我们将它换成:

$ \prod K^{a[i]\times p\times p\times p......\times p} $

然后不断将上述式子用快速幂求值即可(因为是底数所以取模没问题)(当然我们还可以先预处理一下 $ K^{p\times p\times p........\times p} $ 这个部分)

$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int using namespace std; int n,m,t;
ll k,a,ans;
int b[100005];
char c[100005]; inline int qr(){
char ch;
while((ch=getchar())<'0'||ch>'9');
int res=ch^48;
while((ch=getchar())>='0'&&ch<='9')
res=res*10+(ch^48);
return res;
} inline ll fast(ll x,int y){//快速幂
ll res=1;
while(y){
if(y&1)res=res*x%m;
x=x*x%m; y>>=1;
}return res;
} int main(){
//freopen("cipher.in","r",stdin);
//freopen("cipher.out","w",stdout);
k=qr(),m=qr();
while(scanf("%s",c+1)!=EOF){
n=strlen(c+1); t=0;
for(rg i=1;i<=n;++i){
if(c[i]>='0'&&c[i]<='9')b[i]=c[i]-'0';
else b[i]=c[i]-'a'+10;
t=max(t,b[i]+1);
}
a=k; ans=1;
for(rg i=n;i;--i){
ans=ans*fast(a,b[i])%m;
a=fast(a,t);
}printf("%lld\n",ans);
}
return 0;
}

字符加密 Valentino 函数 (伪分治)的更多相关文章

  1. 2个比较经典的PHP加密解密函数分享

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...

  2. PHP 2个比较经典的加密解密函数

    这篇文章主要介绍了2个比较经典的PHP加密解密函数分享,一个是Discuz!的authcode加密函数(带详细分解),一个是encrypt()函数,都比较经典,需要的朋友可以参考下 项目中有时我们需要 ...

  3. php自带加密解密函数

    php自带加密解密函数 一.总结 一句话总结:可逆和不可逆函数. 二.php自带加密解密函数 1.不可逆的加密函数为:md5().crypt() md5() 用来计算 MD5 哈稀.语法为:strin ...

  4. BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6014  Solved: 2503[Submit ...

  5. 【BZOJ-1031】字符加密Cipher 后缀数组

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5504  Solved: 2277[Submit ...

  6. php中base64_decode与base64_encode加密解密函数

    php中base64_decode与base64_encode加密解密函数,实例分析了base64加密解密函数的具体用法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了php中base64_ ...

  7. 【BZOJ】【1031】【JSOI2007】字符加密Cipher

    后缀数组 当年感觉好神的题现在好像变水了…… 题意其实有点蛋疼……一开始没看懂<_< 将原串复制一遍接在后面,用后缀数组求一下SA,那么SA<n的就是所找到的那n个字符串,然后把它们 ...

  8. onethink加密解密函数

    onethink中封装的加密解密函数 <?php /** * 系统加密方法 * @param string $data 要加密的字符串 * @param string $key 加密密钥 * @ ...

  9. bzoj 1031: [JSOI2007]字符加密Cipher 後綴數組模板題

    1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3157  Solved: 1233[Submit ...

随机推荐

  1. python之OrderedDict类

    # OrderedDict类使用举例 # OrderedDict类的使用与字典相似,不同的是OrderedDict类会记录键值对的添加顺序 from collections import Ordere ...

  2. 主成分分析PCA(Principal Component Analysis)在sklearn中的应用及部分源码分析

    最近太忙,又有一段时间没写东西了. pca是机器学习中一个重要的降维技术,是特征提取的代表.关于pca的实现原理,在此不做过多赘述,相关参考书和各大神牛的博客都已经有各种各样的详细介绍. 如需学习相关 ...

  3. iTunes 12.7 没有应用程序选项了,重新安装iTunes 12.6.3

    iTunes 12.6.3 下载地址: Mac http://t.cn/RO5rIfE Win 32 http://t.cn/ROtta1T Win64 http://t.cn/ROtta1n 安装好 ...

  4. Flask-sqlacodegen

    ORM操作有两种方式. 1.模型迁移到数据库中生成表,codefirst:使用flask-migrate: 需要flask-script: from flask_script import Manag ...

  5. Apache访问控制

    简单概述 httpd服务的访问控制 作用: 控制对网站资源的访问 为特定的网站目录添加访问授权 常用访问控制方式: 客户机地址限制 用户授权限制 1.基于客户端地址的访问控制 Order配置项,定义控 ...

  6. android post 方式 访问网络 实例

    android post 方式 访问网络 实例 因为Android4.0之后对使用网络有特殊要求,已经无法再在主线程中访问网络了,必须使用多线程访问的模式 该实例需要在android配置文件中添加 网 ...

  7. 学习Spring Boot:(二十八)Spring Security 权限认证

    前言 主要实现 Spring Security 的安全认证,结合 RESTful API 的风格,使用无状态的环境. 主要实现是通过请求的 URL ,通过过滤器来做不同的授权策略操作,为该请求提供某个 ...

  8. Impacket官方使用指南

      什么是Impacket Impacket是用于处理网络协议的Python类的集合.Impacket专注于提供对数据包的简单编程访问,以及协议实现本身的某些协议(例如SMB1-3和MSRPC).数据 ...

  9. Division, UVa 72(暴力求解)

    题目链接:https://vjudge.net/problem/UVA-725 Write a program that finds and displays all pairs of 5-digit ...

  10. [noip][2017]

    Day1T1 30分思路: 倒着枚举答案z,用扩展欧几里得求解,如果能找到两个非负整数x,y使得ax+by=z则继续枚举,直到无解为止 100分: 最适用与考场上的做法,根据30分思路打表找规律. 3 ...