1361:产生数(Produce)

产生数

  • “位变换”
  • 存在数组
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 using namespace std;
 5 const int N=10005;
 6 int n,k,r[20][2],exist[N],ans=1;
 7 queue<int> q;
 8 void cnt(){
 9     while(!q.empty()){
10         int mod=1,x,y=q.front();
11         x=y;q.pop();
12         while(x){
13             int t=x%10;
14             x/=10;
15             for(int i=1;i<=k;i++)
16                 if(r[i][0]==t){//满足变换条件
17                     int p=y+(r[i][1]-t)*mod;//得到变换后的数
18                     if(!exist[p]){
19                         exist[p]=1;
20                         ans++;
21                         q.push(p);
22                     }
23                 }
24             mod*=10;
25         }
26     }
27 }
28 int main(){
29     cin>>n>>k;
30     for(int i=1;i<=k;i++)
31         scanf("%d%d",&r[i][0],&r[i][1]);
32     q.push(n);
33     exist[n]=1;
34     cnt();
35     cout<<ans;
36     return 0;
37 }

 

posted @ 2021-08-30 12:51  Rekord  阅读(633)  评论(0编辑  收藏  举报