[NC13C]形态形成场/[Gym100430B]Divisible Substrings

题目大意:

有\(m(m\le26)\)个字符串替换式\(S_i(|S_i\le100|)\),表示某个大写字母对应的字符串。比如\(A\rightarrow BB,B\rightarrow CC0,C\rightarrow 123\),代表 \(A=12312301231230,B=1231230,C=123\)。最后一个对应串只包含数字,其余只包含数字和在它之后的大写字母。字母由'A'开始依次出现,问'A'所代表的字符串有多少子串满足:

  • 这个子串为单个字符'0'或没有前导'0'
  • 把这个子串看作一个十进制数后模\(n(n\le30)\)等于\(0\)。

答案对\(r(r\le10^9)\)取模。

思路:

对于每一段字符串维护其必要信息,每次暴力合并维护信息。具体见代码注释。

源代码:

#include<cstdio>
#include<cctype>
#include<cstring>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int K=26,S=101,N=30,D=10;
int n,mod,m;
char s[K][S];
struct Node {
int num,cnt,len,pre[N][N],suf[N];
//num: 值%n
//cnt: 满足条件的子串数
//len: 10^{长度}%n
//pre[i][j]: 前缀num=i、len=j个数
//suf[i]: 后缀num=i个数
};
Node t[D],f[K];
inline void merge(Node &a,const Node &b) {
(a.cnt+=b.cnt)%=mod;
for(register int i=0;i<n;i++) {
for(register int j=0;j<n;j++) {
const int k=(n-(int64)i*j%n)%n;
(a.cnt+=(int64)b.pre[k][j]*a.suf[i]%mod)%=mod;
}
}
for(register int i=0;i<n;i++) {
for(register int j=0;j<n;j++) {
(a.pre[((int64)a.num*j+i)%n][j*a.len%n]+=b.pre[i][j])%=mod;
}
}
int tmp[n];
memcpy(tmp,b.suf,sizeof tmp);
for(register int i=0;i<n;i++) {
(tmp[((int64)i*b.len+b.num)%n]+=a.suf[i])%=mod;
}
memcpy(a.suf,tmp,sizeof tmp);
a.num=((int64)a.num*b.len+b.num)%n;
a.len=(int64)a.len*b.len%n;
}
int main() {
freopen("divisible.in","r",stdin);
freopen("divisible.out","w",stdout);
n=getint(),mod=getint(),m=getint();
for(register int i=0;i<m;i++) {
while(getchar()!='>');
scanf("%s",s[i]);
}
for(register int i=0;i<D;i++) {
t[i].num=i%n;
t[i].cnt=i%n==0;
t[i].len=10%n;
t[i].pre[i%n][10%n]=1;
t[i].suf[i%n]=i!=0;//0本身不可以作为后缀进行合并
}
for(register int i=m-1;i>=0;i--) {
f[i].len=1;
for(register int j=0;s[i][j];j++) {
merge(f[i],isdigit(s[i][j])?t[s[i][j]-'0']:f[s[i][j]-'A']);
}
}
printf("%d\n",f[0].cnt);
return 0;
}

[NC13C]形态形成场/[Gym100430B]Divisible Substrings的更多相关文章

  1. 形态形成场(矩阵乘法优化dp)

    形态形成场(矩阵乘法优化dp) 短信中将会涉及前\(k\)种大写字母,每个大写字母都有一个对应的替换式\(Si\),替换式中只会出现大写字母和数字,比如\(A→BB,B→CC0,C→123\),代表 ...

  2. 牛客挑战赛33 F 淳平的形态形成场(无向图计数,EGF,多项式求逆)

    传送门: 淳平的形态形成场 题解: 把a排序后,直接统计答案恰好为a[i]并不好做,可以统计答案>a[i]的方案数,设为\(f[i]\). 即不存在一个联通块,所有的权值都<=a[i]. ...

  3. HJA的异或值

    HJA的异或值 查看 提交 统计 提问 总时间限制:  20000ms 内存限制:  512000kB 描述 形态形成场(Morphogenetic Field)假说是Rupert Sheldrake ...

  4. 微软2016校园招聘在线笔试第二场 题目1 : Lucky Substrings

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if and only if the number of different ch ...

  5. Kattis之旅——Divisible Subsequences

    Given a sequence of positive integers, count all contiguous subsequences (sometimes called substring ...

  6. [CF百场计划]Codeforces Round #617 (Div. 3)

    A. Array with Odd Sum Description You are given an array \(a\) consisting of \(n\) integers. In one ...

  7. Dynamics CRM 之ADFS 使用 WID 的联合服务器场

    使用 WID 的联合服务器场 默认拓扑 Active Directory 联合身份验证服务 (AD FS) 是联合服务器场,使用 Windows 内部数据库 (WID). 在这种拓扑, AD FS 使 ...

  8. CATransition自定义转场动画

    我们可以通过CATransiton来自定义一些漂亮的转场动画, CATransition继承自CAAnimation, 所以用法跟CAAnimation差不多 先直接上一个代码: #import &q ...

  9. Dynamics CRM 之ADFS 使用 SQL Server 的联合服务器场

    此拓扑用于 Active Directory 联合身份验证服务 (AD FS) 不同于使用 Windows 内部数据库 (WID) 部署拓扑,因为不会将数据复制到每台联合服务器场中的联合身份验证服务器 ...

随机推荐

  1. vue--------脚手架vue-cli搭建

    今天在看公司的项目的时候,用到的是Vue框架,哈哈,Vue已经火好久了,想必大家也晓得哈,这里宝宝就不瞎渣渣了~ 由于宝宝已经三个月木有看过代码了,所以对新公司的很多的架构和代码都是懵逼的,再加上宝宝 ...

  2. layui利用jQuery设置下拉列表的值

    今天在利用jQuery动态设置下拉列表的值的时候确怎么也赋值不上去,其中用到了layui框架,源代码如下: $.post(contextPath+'/courseLibrary/getCourseBa ...

  3. weblogic nmap扫描脚本

     CVE-2018-2894 / Nmap利用脚本,可批量批量快速扫描getshell.检测漏洞.利用漏洞 地址:https://github.com/Rvn0xsy/nse_vuln/tree/ma ...

  4. Ubuntu之设置应用开机自启动

    前言 前面使用oricle-Linux的时候,设置开机自启动使用的是chkconfig,现在使用ubuntu的时候发现Ubuntu系统没有了RH系统中的 chkconfig命令,因此研究了一下ubun ...

  5. caffe Python API 之可视化

    一.显示各层 # params显示:layer名,w,b for layer_name, param in net.params.items(): print layer_name + '\t' + ...

  6. curl错误码77 及 升级libcurl

    今天碰到一个问题,curl请求返回错误码77错误  还给出了官网地址,网上查到77对应的是CURLE_SSL_CACERT_BADFILE   想起了刚默认更新了libcurl,于是有手工安装了一下c ...

  7. 苹果容器超出内容overflow滑动卡顿问题

    -webkit-overflow-scrolling:touch; 就这么一段代码,加载需要滚动的容器css样式中.因为苹果的硬件加速产生的后果....

  8. SPOJ D-query(莫队算法模板)

    题目链接:http://www.spoj.com/problems/DQUERY/ 题目大意:给定一个数组,每次询问一个区间内的不同元素的个数 解题思路:直接套莫队的裸题 #include<cs ...

  9. MVC – 3.EF(Entity Framework)

    1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...

  10. 第三方登陆微博、qq、微信

    源文:http://blog.csdn.net/tivonalh/article/details/60954373 假设是已经申请完成各平台开发者账号. 先来简单的,微博和QQ 微博: 引入微博JS ...