1 条题解
-
0
C :
#include <string.h> #include <stdlib.h> #include <stdio.h> char raw[40]; long long gx[10][10],all[10],out[40]; int main() { long long n,m,i,j,k,xa,xb,top; memset(raw,0,sizeof(raw)); memset(gx,0,sizeof(gx)); memset(all,0,sizeof(all)); memset(out,0,sizeof(out)); scanf("%s",&raw[1]); scanf("%lld",&n); m=strlen(&raw[1]); for(i=1;i<=n;++i) { scanf("%lld%lld",&xa,&xb); gx[xa][xb]=1; } for(i=0;i<=9;++i) for(j=0;j<=9;++j) for(k=0;k<=9;++k) if(gx[i][j]&&gx[j][k])gx[i][k]=1; for(i=0;i<=9;++i) gx[i][i]=1; for(i=0;i<=9;++i) for(j=0;j<=9;++j) all[i]+=gx[i][j]; for(i=1;i<=m;++i) raw[i]-='0'; out[1]=1; for(i=1;i<=m;++i) { for(j=1;j<=30;++j) out[j]*=all[raw[i]]; for(j=1;j<=30;++j) if(out[j]>=10) { out[j+1]+=out[j]/10; out[j]=out[j]%10; } } top=30; while(!out[top])--top; for(i=top;i>=1;--i) printf("%lld",out[i]); return 0; }
C++ :
#include<cstdio> #define MAXN 10001 #define MAXM 16 int n,k; int exist[MAXN]; int que[MAXN]; int a[MAXM],b[MAXM]; int main(void) { scanf("%d",&n); scanf("%d",&k); for (int i=0;i<k;i++) scanf("%d%d",&a[i],&b[i]); exist[n]=1; que[1]=n; int head=1; for (int tail=0;head>=tail;) { int x=que[++tail]; int y=x,mod=1; while (x>0) { int tmp=x%10; x/=10; for (int i=0;i<k;i++) if (a[i]==tmp) { int p=y+(b[i]-tmp)*mod; if (exist[p]==0) { exist[p]=1; que[++head]=p; } } mod*=10; } } printf("%d\n",head); return 0; }
Pascal :
program acm21173A; const jie:array[1..4] of longint=(1,10,100,1000); var a,b:array[1..15] of longint; i,j,k,n,sum,f,r,x,y,t,tmp,m:longint; q:array[1..10000] of longint; function check(x:longint):boolean; var i:longint; begin check:=true; for i:=1 to r do if x=q[i] then exit(false); end; begin readln(n); readln(k); for i:=1 to k do readln(a[i],b[i]); f:=0; r:=1; q[1]:=n; sum:=1; while f<r do begin inc(f); x:=q[f]; y:=x; m:=0; while x>0 do begin tmp:=x mod 10; x:=x div 10; m:=m+1; for i:=1 to k do begin if a[i]=tmp then begin t:=y+(b[i]-a[i])*jie[m]; if check(t) then begin inc(r); q[r]:=t; sum:=sum+1; end; end; end; end; end; writeln(sum); end.
Python :
# coding=utf-8 import queue def work(): v=[False]*10000 q=queue.Queue() m=len(str(n)) q.put(n) v[n]=True ans=1 while not q.empty(): x=q.get() a=[_a for _a in str(x)] for i,c in enumerate(a): x=int(c) for y in xy[x]: a[i]=str(y) new_x=int(''.join(a)) if not v[new_x]: q.put(new_x) v[new_x]=True ans+=1 a[i]=c return ans n=int(input()) k=int(input()) xy=[[] for _ in range(10)] for i in range(k): x,y=map(int,input().split()) if x!=y: xy[x].append(y) print(work())
- 1
信息
- ID
- 891
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者