luogu_1037 产生数
#include <cstdio> #include <iostream> #include <cstring> using namespace std; char a[32]; int k,in[15],ans[1010]; bool d[15][15],vis[15]; void mul(int x){ for(int i=ans[0];i;i--){ ans[i]*=x; ans[i+1]+=ans[i]/10; ans[i]%=10; } for(int i=1;i<=ans[0];i++)ans[i+1]+=ans[i]/10,ans[i]%=10; while(ans[ans[0]+1])ans[0]++; } int dfs(int now){ int sum=1; vis[now]=1; for(int i=1;i<=9;i++) if(d[now][i] && !vis[i])sum+=dfs(i); return sum; } int main(){ ans[0]=ans[1]=1; scanf("%s%d",&a,&k); while(k--){ int u,v; scanf("%d%d",&u,&v); d[u][v]=1; } for(int i=0;i<=9;i++){ memset(vis,0,sizeof(vis)); in[i]=dfs(i); } for(int i=0;i<strlen(a);i++)mul(in[a[i]-'0']); for(int i=ans[0];i;i--)printf("%d",ans[i]); puts(""); return 0; }