博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1009
阅读量:5874 次
发布时间:2019-06-19

本文共 1543 字,大约阅读时间需要 5 分钟。

设f[i,j]为准考证号上第i位匹配到不吉祥数字第j位的方案数,显然j∈[0,m-1]

下面我们就要想到怎么把f[i-1]转移到f[i]
也就是当前匹配到第k位,那么下一位可能会匹配到哪一位
显然我们可以穷举下一位的字符,利用KMP求出下一位会匹配到哪一位(KMP的失配思想)
然后可以得出f[i,j]=f[i-1,0]*w[0,j]+f[i-1,1]*w[1,j]……+f[i-1,m-1]*w[m-1,j]
w[x,y]表示下一位取值能使由上一位匹配到y转移到下一位配到x的数目
然后就是矩乘+快速幂了(感觉解释的很不清楚……)

1 var a,b,c,w:array[0..20,0..20] of longint; 2     next,d:array[0..40] of longint; 3     n,m,p,i,j,k,ans:longint; 4     s:ansistring; 5     ch:char; 6  7 procedure mul; 8   var i,j,k:longint; 9   begin10     for i:=0 to m-1 do11       for j:=0 to m-1 do12       begin13         c[i,j]:=0;14         for k:=0 to m-1 do15           c[i,j]:=(c[i,j]+a[i,k]*b[k,j] mod p) mod p;16       end;17   end;18 19 begin20   readln(n,m,p);21   readln(s);22   for i:=2 to m do23   begin24     while (j<>0) and (s[i]<>s[j+1]) do j:=next[j];25     if s[i]=s[j+1] then26     begin27       inc(j);28       next[i]:=j;29     end;30   end;31   for i:=0 to m-1 do32     for j:=0 to 9 do33     begin34       ch:=chr(j+48);35       k:=i;36       while (k<>0) and (s[k+1]<>ch) do k:=next[k];37       if s[k+1]=ch then inc(k);38       inc(w[k,i]);39     end;40 41   for i:=0 to m-1 do42     c[i,i]:=1;43   j:=0;44   while n>0 do45   begin46     inc(j);47     d[j]:=n mod 2;48     n:=n shr 1;49   end;50   for i:=j downto 1 do51   begin52     a:=c;53     b:=c;54     mul;55     if d[i]=1 then56     begin57       a:=c;58       b:=w;59       mul;60     end;61   end;62   for i:=0 to m-1 do63     ans:=(ans+c[i,0]) mod p;64   writeln(ans);65 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473048.html

你可能感兴趣的文章
js - object.assign 以及浅、深拷贝
查看>>
python mysql Connect Pool mysql连接池 (201
查看>>
Boost在vs2010下的配置
查看>>
android camera(四):camera 驱动 GT2005
查看>>
一起谈.NET技术,ASP.NET伪静态的实现及伪静态的意义
查看>>
20款绝佳的HTML5应用程序示例
查看>>
string::c_str()、string::c_data()及string与char *的正确转换
查看>>
11G数据的hive初测试
查看>>
如何使用Core Text计算一段文本绘制在屏幕上之后的高度
查看>>
==和equals区别
查看>>
2010技术应用计划
查看>>
XML 节点类型
查看>>
驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
查看>>
Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现...
查看>>
Template Method Design Pattern in Java
查看>>
MVC输出字符串常用四个方式
查看>>
LeetCode – LRU Cache (Java)
查看>>
JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)...
查看>>
【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
查看>>
nginx+php的使用
查看>>