【题解】[CJOI2019]Cipher
【题解】[CJOI2019]Cipher
题目描述
给定你\(p\)进制数\(s\),\(p \le 9+26\),求对于十进制数\(k\),求\(k^s \equiv ? \mod m\)
数据范围
\(len(s)\le10^5\)
\(Solution\)
我给的题意其实很简略了,代码里一些细枝末节有所不同,比如\(s\)读入和\(p\)的确定。
考虑题目\(k^s\)代数变形:,\(a_i\)表示\(s\)第\(i\)位上的数。
\[
k^{\Sigma a_ip^{i-1}}=\prod k^{a_ip^{i-1}}=\prod ({k^{p^{i-1}}})^{a_i} \dots \ (1)
\]
其中,可以有恒等式
\[
k^{p^{i+1}}=(k^{p^i})^p
\]
记为
\[
f(i)=k^{p^i},
\]
则有
\[
f(i+1)=f(i)^p
\]
所以
\[
(1)=\prod f(i-1)^{a_i}
\]
预处理\(f(i)\) ,快速幂处理所有的次方,复杂度\(O(nlogn)\)
#include<bits/stdc++.h>
using namespace std;
#define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;++t)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;--t)
#define ERP(t,a) for(register int t=head[a];t;t=e[t].nx)
#define Max(a,b) ((a)<(b)?(b):(a))
#define Min(a,b) ((a)<(b)?(a):(b))
#define midd register int mid=(l+r)>>1
#define TMP template < class ccf >
typedef long long ll;
int cnt;
#define int ll
TMP inline ccf qr(ccf b){
char c=getchar();
int q=1;
ccf x=0;
while(c<48||c>57)
q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)
x=x*10+c-48,c=getchar();
return q==-1?-x:x;
}
ll k,mod;
ll p;
string t1;
const int maxn=1e5+15;
int data[maxn];
inline int trans(char x){
if(x>=48&&x<=57)
return x-48;
return x-'a'+10;
}
inline ll ksm(ll base,ll x){
ll ret=1;
while(x){
if(x&1ll)
ret*=base,ret%=mod;
base*=base;
base%=mod;
x>>=1;
}
return ret%mod;
}
inline void wk(){
ll ans=1;
ll base=k;
RP(t,1,cnt){
ans*=ksm(base,data[t]);
base=ksm(base,p);
ans%=mod;
}
cout<<ans%mod<<endl;
return;
}
string qaq;
inline void qrqr(){
p=0;
cnt=0;
memset(data,0,sizeof data);
DRP(t,qaq.length()-1,0){
cnt++;
data[cnt]=trans(qaq[t]);
p=Max(p,data[cnt]+1);
}
}
signed main(){
freopen("cipher.in","r",stdin);
freopen("cipher.out","w",stdout);
k=qr(1ll);
mod=qr(1ll);
while(cin>>qaq)
qrqr(),wk();
return 0;
}
【题解】[CJOI2019]Cipher的更多相关文章
- 【题解】CJOI2019 登峰造鸡境 (Prufer序列+斯特林数)
[题解]CJOI2019 登峰造鸡境 (Prufer序列+斯特林数) 题目背景 舒服了. 题目描述 你有一颗n个点的无根树,每个点有有一个标号(1~n). 现在你知道,总共有m个叶子节点,求不同的树的 ...
- Timus 1712. Cipher Grille 题解
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组
1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6014 Solved: 2503[Submit ...
- 【BZOJ1031】[JSOI2007]字符加密Cipher 后缀数组
[BZOJ1031][JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的 ...
- Cipher(置换群)
Cipher Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20821 Accepted: 5708 Descripti ...
- # Codeforces Round #529(Div.3)个人题解
Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...
- [JSOI2007]字符加密Cipher SA
[JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7859 Solved: 3410[Submit][Stat ...
- Codeforces Round #470 Div. 2题解
A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
随机推荐
- rails 给类添加属性
steven@ubuntu:~/RubymineProjects/OAONLINE$ rails generate migration AddPasswordToUsers password:stri ...
- SecureCRT鼠标快速复制粘贴
- 从int 3探索Windows应用程序调试原理
http://www.cnblogs.com/xuanyuan/p/3998408.html
- windows 控制台cmd乱码的解决办法
windows 控制台cmd乱码的解决办法 我本机的系统环境: OS Name: Microsoft Windows 10 企业版 OS Version: 10.0.14393 N/A Build 1 ...
- TextView划线 android
TextView 加下划线 . 中划线 下过如图: // 中划线 textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.A ...
- Cocos2d-x中Vector<T>容器以及实例介绍
Vector<T> 是Cocos2d-x 3.x推出的列表容器,因此它所能容纳的是Ref及子类所创建的对象指针,其中的T是模板,表示能够放入到容器中的类型,在Cocos2d-x 3.x中T ...
- C语言之基本算法32—鞍点
//数组 /* ================================================================== 题目:求随意矩阵的全部鞍点.并统计个数.(在矩阵中 ...
- iPhone X
iPhone X前置深度摄像头带来了Animoji和face ID,同时也将3D Face Tracking的接口开放给了开发者.有幸去Cupertino苹果总部参加了iPhone X的封闭开发,本文 ...
- 30:根据排序标识flag给数组排序
题目描述:输入整型数组和排序标识,对其元素按照升序或降序进行排序 接口说明 原型: void sortIntegerArray(Integer[] pIntegerArray, int iSortFl ...
- ubuntu boost.python
安装boost(未尝试只安装 libboost-python-dev) sudo apt-get install libboost-all-dev 新建hello_ext.cpp,输入以下代码 1 c ...