博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HNOI2008]GT考试
阅读量:4548 次
发布时间:2019-06-08

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

Description

阿申准备报名参加GT考试,准考证号为N位数 X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。他的不吉利数学A1A2...Am(0<=Ai& lt;=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2...Am. A1和X1可以为0

Input

第一行输入N,M,K.接下来一行输入M位的数。 100%数据N<=10^9,M<=20,K<=1000 40%数据N<=1000 10%数据N<=6

Output

阿申想知道不出现不吉利数字的号码有多少种,输出模K取余的结果.

Sample Input

4 3 100
111

Sample Output

81
 
 
 
 
 
 
 神题碰上弱菜.....
动态规划啊,但数据这么大怎么想得到是动态规划呢,太弱了......
f[i][j]表示准考证前i位中后j位为不吉利的数字的前j位。
转移方程:
    
 

 

因此就可以使用矩阵乘法加速了!

a[k][j]表示f[i-1][k]转为f[i][j]的方法数,这步可以用KMP解决。

ans+=f[0][j] (j=0;j<m;++j);

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 //ifstream fin("fin.in"); 8 9 string s;10 int n,m,mod,ans=0,pi[25];11 int f[25][25]={
0},a[25][25],b[25][25];12 13 void Work(int x){14 if(x>3) Work(x/2);15 if(x==1) return ;16 17 memset(a,0,sizeof(a));18 for(int i=0;i
>n>>m>>mod>>s;61 s=" "+s;62 Kmp();63 64 Prepare();65 66 Work(n);67 68 for(int i=0;i

 

 

转载于:https://www.cnblogs.com/noip/archive/2013/03/16/2962560.html

你可能感兴趣的文章
Ubuntu16.04源的问题
查看>>
mysql基础5(mysql命令集----表操作)
查看>>
DevExpress:下拉框绑定数据源 (ComboBoxEdit,LookUpEdit)
查看>>
视觉里程计06 Qt界面显示摄像头
查看>>
基于unity3d IFC的虚拟仿真系统
查看>>
linux 2.6 驱动笔记(一)
查看>>
SpringMVC与MyBatis整合方法
查看>>
获取当前系统运行目录
查看>>
多个tomcat实例运行的配置
查看>>
一种基于 Numpy 的 TF-IDF 实现报告
查看>>
wpf窗口阴影
查看>>
linux内核分析第四周-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用...
查看>>
Centos 7升级内核
查看>>
Pandas 基本技巧
查看>>
hdu 1264
查看>>
hdu 1273不会的题
查看>>
(转)父子窗体的菜单合并及工具栏合并
查看>>
分页SQL
查看>>
linux系统使用sh文件传参数给matlab程序
查看>>
软工实践原型设计-黄紫仪
查看>>