评测传送门

Description:

  Valentino 函数的定义:
  对于一个由数字和小写字母组成的字符串 S,两个整数 K,M,将 S 视为一个 P 进制数,定义:
  Valentino(S, K, M) = KS mod M
  对于一个字串对应的进制 P,现作出如下规定:
  S = “12445”,你应该将它视为一个 6 进制数:124456 = 190110 。
  S = “c0ab5h”,你应该将它视为一个 18 进制数:c0ab5h18 = 2273680710 。
  即,对于一个由数字和小写字母组成的字符串 S,将’a’视为 10,’b’视为 11,...,’z’视为 35,你应该找到最小的 P,使得 S 是一个合法的 P 进制数。
  现在,Valentino 手上有若干个由数字和小写字母组成的字符串。他选定了两个数 K,M,想求出每个字符串的 Valentino 函数的十进制表示。但是由于字符串实在太长了,Valentino 实在算不过来,所以他只好求助于你。

Input
  第 1 行为两个正整数 K, M。
  接下来每行一个由数字和小写字母组成的字符串,代表你要处理的字符串。

Output
  每行一个整数,第 i 行输出第 i 个字符串的 Valentino 函数值,以十进制表示。

正解:

我觉得solution讲得超级清楚啊(图点开看还是挺清楚的)

但是要补充解释一个地方:x的含义是 kpi,pi是p的i次方

CODE:

 #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#define R register
#define go(i,a,b) for(R int i=a;i<=b;i++)
#define yes(i,a,b) for(R int i=a;i>=b;i--)
#define M 100000+1
#define ll long long
using namespace std;
ll k,m,n,x,len,a[M],as;
string s;
ll ksm(ll x,ll y)
{
ll ans=;
while(y)
{
if(y&) ans=ans*x%m;
x=x*x%m;y>>=;
}
return ans%m;
}
int main()
{
scanf("%lld%lld",&k,&m);
while(cin>>s)
{
len=s.length()-;n=;as=;x=k;
go(i,,len)
{
if(s[i]>=''&&s[i]<='') a[i]=s[i]-'';
else a[i]=s[i]-'a'+;
n=max(n,a[i]);
}n+=;
yes(i,len,)
{
as=as*ksm(x,a[i])%m;
x=ksm(x,n);
}
printf("%lld\n",as);
}
return ;
}

字符加密 cipher的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 1031: [JSOI2007]字符加密Cipher

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

  7. BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组教程

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

  8. BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题

    BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题 将字符串复制一遍接在原串后面,然后后缀排序即可. #include <cmath> #include &l ...

  9. [JSOI2007]字符加密Cipher

    bzoj 1031:[JSOI2007]字符加密Cipher Time Limit: 10 Sec  Memory Limit: 162 MB Description 喜欢钻研问题的JS同学,最近又迷 ...

  10. [JSOI2007]字符加密Cipher SA

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

随机推荐

  1. HHVM 3.0 发布,执行 PHP 的虚拟机

    HHVM 详细介绍 HipHop VM(HHVM)是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT(Just-In- Time)编译器,同时具有产生快速代码和即时编译的优点. ...

  2. 深入探索.NET内部了解CLR如何创建运行时对象

    前言 SystemDomain, SharedDomain, and DefaultDomain. 对象布局和内存细节. 方法表布局. 方法分派(Method dispatching). 因为公共语言 ...

  3. Print Nodes in Top View of Binary Tree

    Top view of a binary tree is the set of nodes visible when the tree is viewed from the top. Given a ...

  4. kafka重新启动时出现:found a corrupted index file due to requirement failed问题解决方法

    问题如下: 解决方法: 删除kafka目录下的日志文件即可解决

  5. JavaScript的setTimeout()和setInterval()

    1. setTimeout()方法 作用:在制定的毫秒数后调用函数或计算表达式 语法: setTimeout(code,millisec) 实例: function timedMsg() { var ...

  6. mysql中字符串类型char(n)和varchar(n)的区别

    n的含义 根据网络上找到的结果(不能保证准确),在5.0.3以后版本中,n均代表字符数,而不是字节数:我用来测试的版本是5.7.20,该版本中,n表示字符数. 验证过程如下 建表 CREATE TAB ...

  7. 将javaweb项目部署到阿里云服务器

    主要步骤:1. 购买阿里云服务器2. 远程连接3. 在云服务器上配javaweb环境:jdk,tomcat,MySQL4. 将项目的war文件放到Tomcat下关于云服务器ECS:如果还想在买服务器之 ...

  8. rabbitmq .erlang.cookie文件疑惑

    1.安装方式常见的rabbitmq安装方式有两种:rpm安装和二进制安装(编译安装). 2..erlang.cookie是什么.erlang.cookie是erlang实现分布式的必要文件,erlan ...

  9. python操作mysql实例

    #coding=utf-8 import MySQLdb # 打开数据库连接 db = MySQLdb.connect(host='localhost',user='root',passwd='',d ...

  10. C++ STL 常用算术和生成算法

    C++ STL 常用算术和生成算法 accumulate() accumulate: 对指定范围内的元素求和,然后结果再加上一个由val指定的初始值. #include<numeric> ...