LGTB 有一个非常大的数,并且他想对它进行Q 次操作
每次操作是把这个大数中的某种数字全部替换成一个数字串
他想知道Q 次操作之后得到的数对1000000007(109 + 7) 取模的结果,请输出给他
输入
输入第一行代表一个串S 代表初始的数
接下来一行有一个数字Q 代表操作次数
接下来Q 行,每行一个形如a->b1b2b3…bk 的串,代表将a 变成b1b2b3…bk
对于40% 的数据,1|S|<=1000,1<=Q<=10
对于100% 的数据,1<=|S|<=10^5,1<=Q<=10^5,询问中b 串的总长度不超过105
注意b 串可以为空
输出
输出包含一个数字,代表LGTB 想要的结果
样例
样例输入样例输出
123123
1
2->00
10031003
样例输入样例输出
222
2
2->0
0->7
777

最终答案肯定是由每个原串里的数字变成一个区间得到的
所以我们用dp[i][j]代表i这个数字从第j个询问开始进行到最后得到的数%1e9+7答案是多少
再用L[i][j]代表i这个数字从第j个询问开始进行到最后得到的数的长度是多少
那么对于原串中的每个数,对于答案的贡献就是dp[i][q] * pow(10,之后所有数的长度和)
dp从后往前转移即可,唯一需要注意的就是长度也要取模,因为是指数,根据费马小定理应该对1e9+6取模

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long lol;
lol Mod=;
string s,Q[];
lol ans,num[],f[][],LL,L[][];
lol qpow(lol x,lol y)
{
lol res=;
while (y)
{
if (y&) res=res*x%Mod;
x=x*x%Mod;
y=y/;
}
return res;
}
int main()
{int i,q,j,k;
cin>>s;
cin>>q;
for (i=;i<=q;i++)
{
cin>>Q[i];
num[i]=Q[i][]-'';
int len=Q[i].size();
Q[i]=Q[i].substr(,len-);
}
for (i=;i<=;i++)
f[i][q+]=i,L[i][q+]=;
for (i=q;i>=;i--)
{
for (j=;j<;j++)
{
if (num[i]!=j)
{
f[j][i]=f[j][i+];
L[j][i]=L[j][i+];
continue;
}
L[j][i]=;
f[j][i]=;
for (k=Q[i].size()-;k>=;k--)
{
f[j][i]+=f[Q[i][k]-''][i+]*qpow(,L[j][i])%Mod;
f[j][i]%=Mod;
L[j][i]+=L[Q[i][k]-''][i+];
L[j][i]%=Mod-;
}
}
}
int len=s.size();
LL=;ans=;
for (i=len-;i>=;i--)
{
ans+=f[s[i]-''][]*qpow(,LL)%Mod;
ans%=Mod;
LL+=L[s[i]-''][];
LL%=Mod-;
}
cout<<ans;
}

LGTB 与大数的更多相关文章

  1. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  2. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  3. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

  4. 杨氏矩阵:查找x是否在矩阵中,第K大数

    参考:http://xudacheng06.blog.163.com/blog/static/4894143320127891610158/ 杨氏矩阵(Young Tableau)是一个很奇妙的数据结 ...

  5. 蓝桥杯算法提高 P1001(大数乘法)

      算法提高 P1001   时间限制:1.0s   内存限制:256.0MB   当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法. 具体 ...

  6. 51nod 1005 大数加法

    #include<iostream> #include<string> using namespace std; #define MAXN 10001 },b[MAXN]={} ...

  7. PHP大数(浮点数)取余

    一般我们进行取余运算第一个想到的就是用百分号%,但当除数是个很大的数值,超出了int范围时,这样取余就不准确了. php大数(浮点数)取余函数 /** * php大数取余 * * @param int ...

  8. HDU 5686 斐波那契数列、Java求大数

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=5686 当我们要求f[n]时,可以考虑为前n-1个1的情况有加了一个1. 此时有两种情况:当不适用第n个1进 ...

  9. 区间K 大数查询

      算法训练 区间k大数查询   时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列 ...

随机推荐

  1. EM算法的直观描述

    解决含有隐变量的问题有三种方法,其中第三种方法就是通常所说的em算法.下面以统计学习方法中给出的三硬币问题为例来分别描述这三种方法.(a,b,c三硬币抛出来为正的概率分别为pai,p,q,每轮抛硬币先 ...

  2. Access数据库自动生成设计文档

    在做Access数据库设计时,常常直接在access文件中建表,建字段,然后写设计文档时,又得重新再写一遍字段和表间关系.其实access数据库自己就支持自动生成数据库文档. 操作方法如下: 数据库工 ...

  3. 201621123050 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...

  4. Linux学习--进程概念

    >>进程 说进程,感觉好空洞,来一张图,Linux下的进程: ps -eo pid,comm,cmd 说明:-e表示列出全部进程,-o pid,comm,cmd表示我们需要PID,COMM ...

  5. django模板(一)

    模板(一) 实验简介 在前一章中,你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. def current_datetime(req ...

  6. configparser 练习

    [kaixin]xxx = 333name = hahheh = 0[erick]age = 123555xxx = ooo555name = hah555 1 import configparser ...

  7. Tornado介绍及自定义组件

    Tornado 的性能是相当优异的,因为它试图解决一个被称之为"C10k"问题,就是处理大于或等于一万的并发.一万呀,这可是不小的量 条件:处理器为 AMD Opteron, 主频 ...

  8. DES MEI号码加密

    对于加密来说,使用DES加密解密很好,但是为了使不同设备的密文不一样,可以使用 固定字符串 + 设备IMEI号码 加密的方式,这样可以分辨不同手机,限制手机的使用(若是注册,一个手机只有一个IMEI号 ...

  9. Vim 中文社区:期待你的加入

    我们的愿景 Vim 中文社区一直比较零散,缺少凝聚力,现有的一些群经常也是水的可以的,讨论各种无关紧要的内容,于是导致很大一部分人,将这些群丢入了群助手,渐渐地他们也淡出了 vim 中文社区. 而我理 ...

  10. 一个页面多个HTTP请求 页面卡顿!

    用promise解决 前两天面试的时候 一个面试官问到这样一个问题 这里先说出解决的路径 这几天会更新具体的做法 或者直接参考廖雪峰大神 地址如下: https://www.liaoxuefeng.c ...