• 【图论】产生数


    原题传送门

    思路


    !!!太激动了!!!爆肝了两天,终于TMD的做出来了(貌似不该爆粗口的QAQ,咳咳,这段掐掉!)
    这道题考察知识点的范围是真的广。

    • 首先,它考验了理解题目的能力,题目表面很简单,但很多人刚开始都错会了它的意思(包括本蒟蒻)
    • 其次,它考验按照题目码模拟代码的能力,这道题实际上很复杂,失之毫厘就会差之千里,必须仔细认真。
    • 然后,最重要的来了,没有人能想到这样一道纯数字的题竟然要用图论!!!尽管是比较简单的Floyd。
    • 最后,它的数据范围很大,一定要开高精度(考验基本功的时候到了)

    总之,这是一道不可多得的好题。思路我就不写了,建议读者独立完成这道超精品题目,真的很值得!!!

    Code


    #include<iostream>
    #include<cstdio>
    #include<string>
    
    using namespace std;
    
    int cs[10],ns[10]; 
    string n;
    int k,k1,k2;
    int ans[30]={1,1};
    bool tag[16][16]; 
    
    void cheng(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]++;
            }
        }
    }
    
    int main()
    {
        //初始化
        ios::sync_with_stdio(false);
        //读入
        cin>>n>>k;
        for(int i=0;i<n.length();i++)
        {
        	ns[n[i]-48]++;
    	}
        for(int i=1;i<=k;i++)
        {
        	cin>>k1>>k2;
        	tag[k1][k2]=1;
    	}
    	for(int k=1;k<=9;k++)
            for(int i=0;i<=9;i++)
                for(int j=1;j<=9;j++)
                    if(tag[i][k]&&tag[k][j]) 
    					tag[i][j]=1;
    	for(int i=0;i<=9;i++)
        {
        	tag[i][i]=1;
    		for(int j=0;j<=9;j++)
    		{
    			if(tag[i][j])
    				cs[i]++;
    		}	
    	}    
    	for(int x=0;x<=9;x++)
    		for(int i=1;i<=ns[x];i++)
    			cheng(ans,cs[x]);
    	for(int i=ans[0];i>=1;i--)
        	cout<<ans[i];
        return 0;
    }
    
    
    
  • 相关阅读:
    梅森素数
    高精度乘法
    快速幂取模
    高精度加法
    Linux 压缩&解压缩
    Lec_Cloud资源云平台
    IP102,IP102-K_V3.0 输入节点机
    A7互动主机
    音频处理器的使用
    关于测试随笔
  • 原文地址:https://www.cnblogs.com/gongdakai/p/11260510.html
Copyright © 2020-2023  润新知