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 }