1 条题解

  • 0
    @ 2025-2-14 21:23:51

    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
    上传者