三月二日 恶魔果实
分析:首先我们要明确一个事情,就是每一个恶魔果实可以进行的操作数
是任意次的,可以是0,也可以是无限
那么我们很容易就能判断出这是一个排列组合问题
就是每一位数字有多少种变化,最终把每一位数字的变化书相乘即可,由于每一个数只少都能是自己,因此每次相乘最少都是1
因此我们只需计算出x中每一位可以变化成的数字种类,并将其挨个相乘
即可得出最终结果
#include<bits/stdc++.h>
using namespace std;
int main(){
int x;
cin>>x;
int n;
cin>>n;
int m[10][10]={0};
vector<long long> v;
while(x!=0){
long long p=x%10;
v.push_back(p);
x/=10;
}
for(int i=0;i<n;++i){
int a,b;
cin>>a>>b;
m[a][a]=1;
m[a][b]=1;
}
for(int i=0;i<10;++i){
for(int j=0;j<10;++j){
for(int k=0;k<10;++k){
if(m[i][j]==1 && m[j][k]==1){
m[i][k]=1;
}
}
}
}
long long sum=1;
for(int i=0;i<v.size();++i){
int t=0;
for(int j=0;j<10;++j){
if(m[v[i]][j]==1){
t++;
}
}
if(t!=0){
sum*=t;
sum%=10007;
}
}
cout<<sum;
return 0;
}

京公网安备 11010502036488号