每个数的情况是独立的,我们只需要算出每个数能变换成多少种数字即可,这点用bfs实现,我们只需要搜索0-9的数即可
代码如下
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define debug(x) cerr << #x << ": " << x << '\n';
const int INF = 0x3f3f3f3f3f3f3f3f;
const int mod=1e4+7;
//倒序不要忘记是--不是++
void solve(){
int x,n;cin>>x>>n;
vector<vector<int>> e(11);
vector<vector<int>> is(11,vector<int>(11,0));
while(n--){
int a,b;cin>>a>>b;
if(is[a][b]) continue;
is[a][b]=1;
e[a].push_back(b);
}
vector<int> cnt(11,0);
for(int i=0;i<=9;i++){
vector<bool> vis(10,false);
queue<int> q;
q.push(i);
while(q.size()){
cnt[i]++;
vis[i]=1;
int t=q.front();
q.pop();
for(auto u:e[t]){
if(vis[u]) continue;
vis[u]=1;
q.push(u);
}
}
}
// for(int i=1;i<=9;i++) cout<<cnt[i]<<" ";
// cout<<"\n";
int ans=1;
while(x){
int cur=x%10;
ans=ans*cnt[cur]%mod;
x/=10;
}
cout<<ans;
}
signed main(){
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int t = 1;
// cin>>t;
while(t--){
solve();
}return 0;
}

京公网安备 11010502036488号