【题解】[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的更多相关文章

  1. 【题解】CJOI2019 登峰造鸡境 (Prufer序列+斯特林数)

    [题解]CJOI2019 登峰造鸡境 (Prufer序列+斯特林数) 题目背景 舒服了. 题目描述 你有一颗n个点的无根树,每个点有有一个标号(1~n). 现在你知道,总共有m个叶子节点,求不同的树的 ...

  2. Timus 1712. Cipher Grille 题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

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

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

  4. 【BZOJ1031】[JSOI2007]字符加密Cipher 后缀数组

    [BZOJ1031][JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的 ...

  5. Cipher(置换群)

    Cipher Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20821   Accepted: 5708 Descripti ...

  6. # Codeforces Round #529(Div.3)个人题解

    Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...

  7. [JSOI2007]字符加密Cipher SA

    [JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7859  Solved: 3410[Submit][Stat ...

  8. Codeforces Round #470 Div. 2题解

    A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  9. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

随机推荐

  1. ELK之filebeat收集多类型日志

    1.IP规划 10.0.0.33:filebeat+tomcat,filebeat收集系统日志.tomcat日志发送到logstash 10.0.0.32:logstash,将日志写入reids(in ...

  2. spring-cloud - 服务之间的通信

    上文中已经讲述了基本环境搭建,本文基于上文环境https://www.cnblogs.com/xxpandong/p/10485172.html. spring-cloud中微服务之间通信主要有俩种形 ...

  3. Ruby 定时任务之一(初步尝试)

    最近工作需要用到定时任务.原来写java的时候也用到过类似的Scheduler的功能. Ruby语言中也有同样功能的工具.rufus-scheduler.下面介绍一下rufus-scheduler. ...

  4. iOS 汉字转拼音 PinYin4Objc

    PinYin4Objc 是一个效率很高的汉字转拼音类库,支持简体和繁体中文.有以下特性:1.效率高,使用数据缓存,第一次初始化以后,拼音数据存入文件缓存和内存缓存,后面转换效率大大提高:2.支持自定义 ...

  5. linux使用tar命令打包压缩时排除某个文件夹或文件

    今天在使用tar命令进行文件夹打包压缩的时候,需要打包压缩masalaPage目录,但是该目录中的2017,2016两个目录中的文件不进行打包压缩 所以通常使用的tar -zcvf masalaPag ...

  6. 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(一)搭建开发环境

    学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html 进入下载页后,可以 ...

  7. 转: 使用maven给spring项目打可直接运行的jar包(配置文件内置外置的打法)

    from:  http://www.cnblogs.com/hdwang/p/5418747.html

  8. 2.配置通过数据库接收SaltStack批量管理日志

    2.配置通过数据库接收SaltStack批量管理日志 2016-07-04 10:02:52来源:oschina作者:eddy_linux人点击     默认情况下发送给salt minion的命令执 ...

  9. jquery相冊图片来回选择

    <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <script sr ...

  10. linux 安装jdk和tomcat

    安装jdk 下载相关jdk .rpm包,如:jdk-8u31-linux-i586.rpm 解压:#rpm -ivh jdk-8u31-linux-i586.rpm 配置环境变量:#vi  /etc/ ...