[BZOJ1009][HNOI2008]GT考试 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0<=Ai<=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2...Am. A1和X1可以为0 Input 第一行输入N,M,K.接下来一行输入M位的数. N<=10^9,M<=20,K<=1000 Output 阿申想知…
1009: [HNOI2008]GT考试 题目:传送门 题解: 看这第一眼是不是瞬间想起组合数学??? 没错...这样想你就GG了! 其实这是一道稍有隐藏的矩阵乘法,好题! 首先我们可以简化一下题意:给出一个串,要求这个串不包含另一个串的方案个数 这不是kmp吗?!(直接暴力肯定炸) 我们可以再往DP的方面想 f[i][j]表示长度为i的母串的后缀与子串匹配j个长度的方案数 那么ans=Sigma(f[n][0]~f[n][m-1]) 那么我们再定义一个c[i][j]表示在子串长度为i的前缀后面…
Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0<=Ai<=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2...Am. A1和X1可以为0 Input 第一行输入N,M,K.接下来一行输入M位的数. N<=10^9,M<=20,K<=1000 Output 阿申想知道不出现不吉利数字的号码有多少种,输出模K取余的…
[BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2-Am有M位,不出现是指X1X2-Xn中没有恰好一段等于A1A2-Am. A1和X1可以为0 \(0 \leq X_i \leq 9,0\leq Ai\leq 9,m \leq 20,n \leq 10^9\) 分析 先考虑暴力的思路,设\(dp[i][j]\)表示前i位数与不吉利数字匹配了前…
1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2745  Solved: 1694[Submit][Status][Discuss] Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0<=Ai<=9)有M位,不出现是指X1X2...Xn中没有恰好一段等于A1A2..…
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 好神的题orzzzzzzzzzz 首先我是连递推方程都想不出的人...一直想用组合来搞..看来我是sb.. 设f[i,j]表示前i个字符匹配了前j个不吉利数字的方案,即i-j+1~i都是不吉利数字 那么答案就是sigma{f[n,i], 0<=i<m} 转移是 f[i+1,k]=sum{f[i, j],枚举i+1的字符后,k是i+1字符和不吉利数字匹配1~k,0<=k<=j}…
标题效果:给定的长度m数字字符串s.求不包括子s长度n数字串的数目 n<=10^9 看这个O(n)它与 我们不认为这 令f[i][j]长度i号码的最后的字符串j位和s前者j数字匹配方案 例如,当s至12312时间 f[i][3]它表示的长度i.123结尾且不包括子串"12312"的方案数 a[x][y]为f[i-1][x]转移至f[i][y]的方案数 换句话说(可能描写叙述不清楚) a[x][y]为s的长度为x的前缀加上一个数字后 后缀能够与最长长度为y的前缀匹配 这个数字能够有…
传送门 这道题目的题意描述,通俗一点说就是这样:有一个长度为n的数字串(其中每一位都可以是0到9之间任意一个数字),给定一个长度为m的模式串,求有多少种情况,使得此模式串不为数字串的任意一个子串.结果对给定的模数取模. 我们为了阅读方便,将数字串称为P串,给定的模式串称为T串. 一开始有这么个暴力想法,就是直接把T串往P串里面匹配,算出有多少种不合法的情况再计算,不过这样并不行,因为在这种算法中有很多种不合法情况被重复计算了. 于是乎看了题解(看题解也看不懂的我).我们使用dp[i][j]表示在…
P3193 [HNOI2008]GT考试 思路: 设\(dp(i,j)\)为\(N\)位数从高到低第\(i\)位时,不吉利数字在第\(j\)位时的情况总数,那么转移方程就为: \[dp(i,j)=dp(i+1,k)*a(j,k)\] 这里\(a(j,k)\)就是从第\(j\)位到第\(k\)位的情况总数.那么根据这个转移方程我们就可以直接求解了.但是题目中\(N\)的范围过大,直接枚举可能要爆炸,我们这样考虑,将dp方程稍微变化一下: \[dp(i,j)=\sum_{k=1}^mdp(i-1,k…
传送门 f[i][j]f[i][j]f[i][j]表示从状态"匹配了前i位"转移到"匹配了前j位"的方案数. 这个东西单次是可以通过跳kmp的fail数组得到的. 考虑到每次都是一样的就可以用矩阵快速幂优化一波. 代码: #include<bits/stdc++.h> using namespace std; int n,m,mod,fail[21]; bool vis[21][10]; char s[21]; struct Matrix{ int va…