40分求助
查看原帖
40分求助
553871
JMxxxx楼主2023/10/13 12:45
#include<bits/stdc++.h>
using namespace std;
char ans[40];
string s;
int k;
int check[10];
int dis[10][10];
int t[10];
void mul(int tmp)
{
    int l=strlen(ans);
    int x=0,cnt=0;
    if(tmp==10)
    {
        for(int i=l;i>0;i--)
        {
            ans[i]=ans[i-1];
        }
        ans[0]='0';
    }
    else
    {
        for(int i=0;i<l;i++)
        {
            x=(ans[i]-'0')*tmp+cnt;
            cnt=x;
            if(x>=10)
            {
                x%=10;
            }
            ans[i]=x+'0';
            cnt=(cnt-x)/10;
        }
        if(cnt!=0)
        {
            ans[l]=cnt+'0';
        }
    }
}
int main()
{
    cin>>s>>k;
    int a,b;
    for(int i=0;i<k;i++)
    {
        cin>>a>>b;
        dis[a][b]=1;
    }
    int len=s.length();
    for(int i=0;i<len;i++)
    {
        check[s[i]-'0']++;
    }
    ans[0]='1';
    for(int k=1;k<=9;k++)
    {
        for(int i=0;i<=9;i++)
        {
            for(int j=1;j<=9;j++)
            {
                if(dis[i][j]==1||dis[i][k]==1&&dis[k][j]==1)
                {
                    dis[i][j]=1;
                }
            }
        }
    }
    for(int i=0;i<=9;i++)
    {
        dis[i][i]=0;
    }
    for(int i=0;i<=9;i++)
    {
        int tmp=1;
        for(int j=0;j<=9;j++)
        {
            if(dis[i][j]==1&&check[i]==1)
            {
                tmp++;
            }
        }
        if(s[0]-'0'==i&&dis[i][0]==1)
        {
            tmp--;
        }
        t[i]=tmp;
    }
    for(int i=0;i<=len;i++)
    {
        if(t[s[i]-'0']>0)
        {
            mul(t[s[i]-'0']);
        }
    }
    for(int i=strlen(ans)-1;i>=0;i--)
    {
        cout<<ans[i];
    }
    return 0;
}
2023/10/13 12:45
加载中...