luogu P1037 【产生数】

貌似都是用佛洛依德写的,我就来个\(DFS\)搜索的方法吧。

首先通过字符串读入来读入这个数字。

然后对每一位数字进行\(DFS\),每搜索到一个数字计数器加一。最后根据分步计算原理,将每位数可扩展的数进行相乘输出即可。

另外第四、第五组数据较大好久没有写高精度写挂了好几次滑稽


Coding:

#include<bits/stdc++.h>
using namespace std;


string num;
int k,a[20],b[20],ans = 0,sum[30] = {};//ans每一位可以扩展多少个数字
bool vis[10] = {};//vis记录当前数字有没有被搜过


inline int read()//快读
{
    int x = 0;
    char ch = getchar();
    while(ch < '0' || ch > '9') ch = getchar();
    while(ch >= '0' && ch <= '9')
    {
        x = (x<<3)+(x<<1) + ch-'0';
        ch = getchar();
    }
    return x;
}

inline void mul(int a[],int b)//低精度乘高精度
{
    for(int i = 1;i <= a[0];i++)
    {
        a[i] *= b;
    }
    for(int i = 1;i <= a[0];i++)
    {
        if(a[i] >= 10)
        {
            a[i+1] += a[i]/10;
            a[i] %= 10;
            if(i == a[0]) a[0]++;
        }
    }
}

inline void dfs(int x)
{
    vis[x] = 1;//每搜到一个打个标记
    ans++;
    for(int i = 1;i <= k;i++)
    {
        if(a[i] == x && !vis[b[i]]) dfs(b[i]);//如果符合且未被搜索
    }
}


int main()
{
    cin >> num;
    k = read();
    sum[0] = 1;
    sum[1] = 1;
    for(int i = 1;i <= k;i++)
    {
        a[i] = read();
        b[i] = read();
    }
    for(int i = 0;i < num.size();i++)
    {
        dfs(num[i]-'0');
        mul(sum,ans);
        memset(vis,0,sizeof(vis));//消除影响
        ans = 0;
    }
    for(int i = sum[0];i >= 1;i--) printf("%d",sum[i]);
    putchar('\n');

    return 0;
}

转载于:https://www.cnblogs.com/Mark-X/p/11404645.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值