2 条题解
-
0
#include <bits/stdc++.h> using namespace std; int tag[10][10], d[10], p[1000], n; string a; int main() { cin >> a; scanf("%d", &n); int x, y; for(int i = 0; i < n; i++) { scanf("%d%d", &x, &y); tag[x][y] = 1; } for(int k = 1; k <= 9; k++) for(int i = 0; i <= 9; i++) for(int j = 1; j <= 9; j++) if(tag[i][k] && tag[k][j]) tag[i][j] = 1;//可以间接转化的数,并且注意这个i,j,k的排列。只有这种排列可以找到所有情况 for(int i = 0; i < 10; i++) { tag[i][i] = 1; for(int j = 0; j < 10; j++) if(tag[i][j]) d[i]++; } int z; p[0] = 1; for(int i = 0; a[i]; i++) { z = 0; int x = d[a[i] - '0']; for(int i = 0; i < 500; i++) { p[i] = (p[i] * x + z); z = p[i] / 10; p[i] %= 10; } } int i = 500; while(p[i] == 0) i--; for(; i >= 0; i--) printf("%d", p[i]); printf("\n"); return 0; } -
0
#include<bits/stdc++.h> using namespace std; int tag[10][10],d[10],p[1000],n; string a; int main() { cin>>a; scanf("%d",&n); int x,y; for(int i=0;i<n;i++) { scanf("%d%d",&x,&y); tag[x][y]=1; } for(int k=1;k<=9;k++) for(int i=0;i<=9;i++) for(int j=1;j<=9;j++) if(tag[i][k]&&tag[k][j]) tag[i][j]=1;//可以间接转化的数,并且注意这个i,j,k的排列。只有这种排列可以找到所有情况 for(int i=0;i<10;i++) { tag[i][i]=1; for(int j=0;j<10;j++) if(tag[i][j]) d[i]++; } int z; p[0]=1; for(int i=0;a[i];i++) { z=0; int x=d[a[i]-'0']; for(int i=0;i<500;i++) { p[i]=(p[i]*x+z); z=p[i]/10; p[i]%=10; } } int i=500; while(p[i]==0) i--; for(;i>=0;i--) printf("%d",p[i]); printf("\n"); return 0; }
- 1
信息
- ID
- 533
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 20
- 已通过
- 15
- 上传者