【题解】[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. 实现一个Java五子棋

    五子棋手把手教你写: 写在前面的话: 回想起从前初学代码的五子棋简直写的不像样子.今天闲来无事就写了个五子棋的小程序. 一来呢回忆一下很久以前写代码时的感觉. 二来呢顺便帮下诸位有需求的学生,顺利的C ...

  2. https的实现原理

    加密算法 有两种基本的加解密算法类型: 1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES.AES等: 2)非对称加密:密钥成对出现(且根据公钥无法推知私钥, ...

  3. Maven出现错误No plugin found for prefix 'jetty' in the current project and in the plugin groups的问题解决

    只需在maven的setting.xml文件上加入如下节点: <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginG ...

  4. Ambient Occulution

    SSAO HDAO normal pair 求一个谷 SAO 重建normal HBAO input depth,normal 这几个都是screen space的ao

  5. Mycat本地模式的自增长分表操作

    Mycat对表t_rc_rule_monitor做分表操作 在mysql上执行(没有t_rc_rule_monitor) DROP TABLE IF EXISTS t_rc_rule_monitor; ...

  6. 【音乐App】—— Vue-music 项目学习笔记:搜索页面开发

    前言:以下内容均为学习慕课网高级实战课程的实践爬坑笔记. 项目github地址:https://github.com/66Web/ljq_vue_music,欢迎Star. 搜索歌手歌曲 搜索历史保存 ...

  7. curses.h头文件不存在解决办法

    sudo apt-get install libncurses5-dev安装,系统自带库文件一般在/usr/include下面,这个是安装curses.h的 conio不是c语言标准库,也不是posi ...

  8. Node.js学习入门手册

    Node.js 安装 1.下载http://nodejs.org/dist/v0.12.1/node-v0.12.1-x86.msi并完成安装 2.下载https://www.python.org/f ...

  9. 控制div属性

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 【小程序】微信小程序开发实践

    帐号相关流程 注册范围 企业 政府 媒体 其他组织 换句话讲就是不让个人开发者注册. :) 填写企业信息 不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的. 填写公司机构信 ...