数数
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #include <bits/stdc++.h> |
| using namespace std; |
| const int N=1210,M=1510; |
| const int mod=1e9+7; |
| |
| void add(int &x,int y) { |
| x=(x%mod+y%mod)%mod; |
| } |
| |
| int ch[M][10],flag[M],fail[M],tot; |
| void insert(string s) { |
| int p=0; |
| for(auto i:s) { |
| int v=i-'0'; |
| if(ch[p][v]==0)ch[p][v]=++tot; |
| p=ch[p][v]; |
| } |
| flag[p]=1; |
| } |
| |
| void build() { |
| queue<int>q; |
| for(int i=0;i<10;i++) |
| if(ch[0][i])q.push(ch[0][i]); |
| while(!q.empty()) { |
| int now=q.front();q.pop(); |
| flag[now]|=flag[fail[now]]; |
| for(int i=0;i<10;i++) { |
| if(ch[now][i]) { |
| fail[ch[now][i]]=ch[fail[now]][i]; |
| q.push(ch[now][i]); |
| } |
| else ch[now][i]=ch[fail[now]][i]; |
| } |
| } |
| } |
| |
| int n,m; |
| char s[N]; |
| int f[N][M][2]; |
| |
| int solve() { |
| for(int i=1;i<s[1]-'0';i++)add(f[1][ch[0][i]][0],1); |
| add(f[1][ch[0][s[1]-'0']][1],1); |
| for(int i=2;i<=n;i++) { |
| for(int j=1;j<10;j++)add(f[i][ch[0][j]][0],1); |
| for(int j=0;j<=tot;j++) { |
| if(flag[j])continue; |
| for(int k=0;k<10;k++)add(f[i][ch[j][k]][0],f[i-1][j][0]); |
| for(int k=0;k<s[i]-'0';k++)add(f[i][ch[j][k]][0],f[i-1][j][1]); |
| add(f[i][ch[j][s[i]-'0']][1],f[i-1][j][1]); |
| } |
| } |
| int ans=0; |
| for(int i=0;i<=tot;i++) |
| if(flag[i]==0)add(ans,f[n][i][0]+f[n][i][1]); |
| return ans; |
| } |
| |
| int main() { |
| scanf("%s",s+1); |
| n=strlen(s+1); |
| cin>>m; |
| while(m--) { |
| string tmp;cin>>tmp; |
| insert(tmp); |
| } |
| build(); |
| cout<<solve()<<endl; |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现