样例可过,0分 #WA5个!求助大佬
查看原帖
样例可过,0分 #WA5个!求助大佬
988775
s1mpfe楼主2024/12/28 15:59
#include <bits/stdc++.h>
using namespace std;
char a[60];
int n,s=1,m;
int b[10][16];
int c[60];
int d[11];
bool g[11][10];		//数位上有没有用过
void su(int p)
{
	int i,j,k;
	if(d[p]==0)
		return ;
	for(i=1;i<=d[p];i++)
		{
			k=b[p][i];
			if(g[p][k]==0)				//c[p]-->k 1>2>3
			{							//c[p]--> 1
				g[p][k]=1;
				s++;
				su(k);			
			}
			else
				return ;	
		}
}
void souw(int p)
{
	int i,j;
	memset(g,0,sizeof(g));//
	if(p>m)
		return;
	j=c[p];		//j--第几位的数字
	g[p][j]=1;		//不可用
	if(d[j]!=0)	//如果有规则
		su(j);							//234 ---  3-->n 
	souw(p+1);
}
void sue(int p)
{
	int i,j,k;
	if(d[p]==0)
		return ;
	for(i=1;i<=d[p];i++)
		{
			k=b[p][i];
			if(g[p][k]==0)				//c[p]-->k 1>2>3
			{
				if(k==0)
				{
					g[p][k]=1;
					su(0);
				}
				else
				{
					g[p][k]=1;
					s++;
					su(k);	
				}
						
			}
			else
				return ;	
		}
}
void souww(int p)			//1的特判
{
	int i,j,k;
	memset(g,0,sizeof(g));
	j=c[p];		//j--第几位的数字
	g[p][j]=1;		//不可用
	if(d[j]!=0)	//如果有规则
		sue(j);
	souw(p+1);
}

int main()
{
	int i,j,k;
	cin>>a;
	m=strlen(a);
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>k;
		d[k]+=1;			//这个数的规则加一
		cin>>j;				//规则是()
		b[k][d[k]]=j;		//数K的第d[k]个规则
	}
	for(i=0;i<m;i++)		//转化
	{
		j=a[i]-'0';
		c[i+1]=j;
	}
	souww(1);				
	cout<<s<<endl;
	return 0;
}
2024/12/28 15:59
加载中...