字符加密 Valentino 函数 (伪分治)
题面


$ 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 函数 (伪分治)的更多相关文章
- 2个比较经典的PHP加密解密函数分享
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...
- PHP 2个比较经典的加密解密函数
这篇文章主要介绍了2个比较经典的PHP加密解密函数分享,一个是Discuz!的authcode加密函数(带详细分解),一个是encrypt()函数,都比较经典,需要的朋友可以参考下 项目中有时我们需要 ...
- php自带加密解密函数
php自带加密解密函数 一.总结 一句话总结:可逆和不可逆函数. 二.php自带加密解密函数 1.不可逆的加密函数为:md5().crypt() md5() 用来计算 MD5 哈稀.语法为:strin ...
- BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6014 Solved: 2503[Submit ...
- 【BZOJ-1031】字符加密Cipher 后缀数组
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5504 Solved: 2277[Submit ...
- php中base64_decode与base64_encode加密解密函数
php中base64_decode与base64_encode加密解密函数,实例分析了base64加密解密函数的具体用法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了php中base64_ ...
- 【BZOJ】【1031】【JSOI2007】字符加密Cipher
后缀数组 当年感觉好神的题现在好像变水了…… 题意其实有点蛋疼……一开始没看懂<_< 将原串复制一遍接在后面,用后缀数组求一下SA,那么SA<n的就是所找到的那n个字符串,然后把它们 ...
- onethink加密解密函数
onethink中封装的加密解密函数 <?php /** * 系统加密方法 * @param string $data 要加密的字符串 * @param string $key 加密密钥 * @ ...
- bzoj 1031: [JSOI2007]字符加密Cipher 後綴數組模板題
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3157 Solved: 1233[Submit ...
随机推荐
- pgm17
这部分讨论决策理论与 PGM 的关系,一个主要的思路就是将决策与 PGM 的 inference 完美的融合在一起. MEU 为了引入决策理论中的 maximum expected utility 原 ...
- bzoj 2599: [IOI2011]Race (点分治 本地过了就是过了.jpg)
题面:(复制别人的...) Description 给一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. Input 第一行 两个整数 n, k第二..n行 每行三个整数 表示一条无向边的 ...
- tmux的使用
tmux的使用 1: tmux的介绍 tmux是一个优秀的终端多路复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并 ...
- Python的单向链表实现
思路 链表由节点组成,先规定节点(Node),包含data和指向下个节点的next 初始化 data当然就是传入的data了,next指向None 添加 分两种情况: 链表为空,那么头节点和尾节点都指 ...
- SimpleDateFormat是线程不安全的,切忌切忌!
多线程方法中使用了共享变量SimpleDateFormat,报如下错误: java.lang.NumberFormatException: multiple points at sun.misc.F ...
- Azure HDInsight 上的 Spark 群集配合自定义的Python来分析网站日志
一.前言:本文是个实践博客,演示如何结合使用自定义库和 HDInsight 上的 Spark 来分析日志数据. 我们使用的自定义库是一个名为 iislogparser.py的 Python 库. 每步 ...
- c++ 静态变量报错 undefined reference to static members
c++中静态变量不但要在头文件中declare,还要在实现的cpp中declare.当然也可以赋个初始值. class foo { int _i; public: foo(int i) : _i(i) ...
- SpaceVim的基本安装和常见问题
SpaceVim官网:https://spacevim.org/ SpaceVim中文官网:http://spacevim.org/cn/ SpaceVim的Github页面:https://gith ...
- 平台加载面板的方法$.loadPml
$.loadPml({ paneId:"", paneName:"", loadUrl:"/"+globalURL+"/mvcco ...
- SQL经典问题:找出连续日期及连续的天数
create table tmptable(rq datetime) go insert tmptable values('2010.1.1') insert tmptable values('201 ...