• NOIP2002普及T3【产生数】


    做完发现居然没人用map搞映射
    特意来补充一发


    很容易看出这是一道搜索题
    考虑搜索方案,如果按字符串转移,必须存储每种状态,空间复杂度明显会爆炸
    观察到每一位之间是互不影响的


    考虑使用乘法原理
    搜索出每一位的情况总数,求它们的连乘积即为答案


    时间复杂度O(n2^k)
    可以看出答案最大可以达到三十的十次方,会爆掉long long,所以需要写高精


    具体处理可以选择STL(懒得自己写)
    对于映射,这是map的专长
    如果一个数能够映射到多个数呢?
    用map的时候从char映射到vector<char>即可


    代码:

    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<vector>
    #include<cstring>
    using namespace std;
    map<char,vector<char> >mp;
    string st;
    int k,l,c[10],mul[100];
    void dfs(char th)
    {
        c[th-'0']=1;
        int sz=mp[th].size();
        for(int i=0;i<sz;i++)
            if(!c[mp[th][i]-'0'])
                dfs(mp[th][i]);
    }
    signed main()
    {
        cin>>st>>k;
        l=st.length();
        for(int i=1;i<=k;i++)
        {
            char x,y;
            cin>>x>>y;
            mp[x].push_back(y);
        }
        mul[0]=1;
        for(int i=0;i<l;i++)
        {
            memset(c,0,sizeof(c));
            dfs(st[i]);
            int sum=0;
            for(int i=0;i<=9;i++)
                sum+=c[i];
            int x=0;
            for(int i=0;i<100;i++)
            {
                mul[i]=mul[i]*sum+x;
                x=mul[i]/10;
                mul[i]%=10;
            }
        }
        int i=99;
        while(i>0&&!mul[i])
            i--;
        for(;i>=0;i--)
            cout<<mul[i];
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    使用docker部署Asp.net core web应用程序
    Docker 常用命令参考
    CentOS 系列安装 Docker
    在IIS上部署你的ASP.NET Core项目
    【POJ1742】Coins
    【CH5105】Cookies
    【NOIP2008】传纸条
    【CH5102】Mobile Service
    【CH1401】兔子与兔子
    【CH5101】LCIS
  • 原文地址:https://www.cnblogs.com/ivanovcraft/p/9089130.html
Copyright © 2020-2023  润新知