zoukankan      html  css  js  c++  java
  • “Shopee杯” e起来编程暨武汉大学2020年大学生程序设计大赛决赛(重现赛)F--Figure out the sequence(map)

    地址:https://ac.nowcoder.com/acm/contest/5523/F

         题意:给出s1串和s2串,按以下方式组合:

             1: s1

           2: s2

           3: s1+s2

           4: s2+s1+s2

           5: s1+s2+s2+s1+s2

           ..........

           对每次过程s1,s2串出现次数计数,用a[]和b[]分别记录,可以得出:a[i]+b[i]==b[i+1]   b[i]==a[i+1]。所以可以先对n以内的a[],b[]打个表,用mpa和mpb对字母出现次数统计,然后乘上对应的出现次数,用mpall进行收集起来,按字典序把出现次数>0的字母打出来就行了。注意一下细节,先打所有出现过的大写字母,然后是小写字母。n=1只打s1串,n=2只打s2串,这里需要特判一下。

    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int maxn=30;
    char s1[maxn],s2[maxn];
    int n;    
    int a[50];
    int b[50];
    void init()
    {
        a[1]=1;
        a[2]=1;
        b[1]=1;
        b[2]=1;
        a[3]=1,b[3]=1,a[4]=1,b[4]=2;
        int amd=b[4],bmd=a[4]+b[4];
        for(int i=5;i<=n;i++)
        {
            a[i]=amd;
            b[i]=bmd;
            amd=b[i];
            bmd=a[i]+b[i];
        }
    }
    int main()
    {
        cin>>s1;
        cin>>s2;
        cin>>n;
        init();
        int len1=strlen(s1),len2=strlen(s2);
        map<char,int>mpa;
        map<char,int>mpb;
        map<char,int>mpall2;
        for(int i=0;i<len1;i++)
        {
            mpa[s1[i]]++;
        }
        for(int i=0;i<len2;i++)
        {
            mpb[s2[i]]++;
        }
        if(n==1)
        {
                    for(int i=0;i<26;i++)
                    {
                        char ch=char(i+65);
                        if(mpa[ch]!=0)
                        printf("%c: %d
    ",ch,mpa[ch]);
                    }
                    for(int i=0;i<26;i++)
                    {
                        char ch=char(i+97);
                        if(mpa[ch]!=0)
                        printf("%c: %d
    ",ch,mpa[ch]);
                    }        
                    return 0;
        }
        if(n==2)
        {
                    for(int i=0;i<26;i++)
                    {
                        char ch=char(i+65);
                        if(mpb[ch]!=0)
                        printf("%c: %d
    ",ch,mpb[ch]);
                    }
                    for(int i=0;i<26;i++)
                    {
                        char ch=char(i+97);
                        if(mpb[ch]!=0)
                        printf("%c: %d
    ",ch,mpb[ch]);
                    }        
                    return 0;
        }    
        for(int i=0;i<26;i++)
        {
            char daxie=char(i+65);
            char xiaoxie=char(i+97);
            mpa[xiaoxie]=mpa[xiaoxie]*a[n];
            mpa[daxie]=mpa[daxie]*a[n];
            mpb[xiaoxie]*=b[n];
            mpb[daxie]*=b[n];
            mpall2[xiaoxie]+=mpa[xiaoxie]+mpb[xiaoxie];
            mpall2[daxie]+=mpa[daxie]+mpb[daxie];
        }
        for(int i=0;i<26;i++)
        {
            char ch=char(i+65);
            if(mpall2[ch]!=0)
            printf("%c: %d
    ",ch,mpall2[ch]);
        }
        for(int i=0;i<26;i++)
        {
            char ch=char(i+97);
            if(mpall2[ch]!=0)
            printf("%c: %d
    ",ch,mpall2[ch]);
        }
    }
  • 相关阅读:
    temp
    Windows如何利用输入法简单的打出 ‘↑’ ‘↓’ ‘↖’等箭头
    Win10系统特别卡的一个原因
    巨蟒python全栈开发-第16天 核能来袭-初识面向对象
    在pycharm中误删了Python文件,怎么办,挺急的?
    巨蟒python全栈开发-第15天 装饰器
    巨蟒python全栈开发-第13天 内置函数 匿名函数lambda
    巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from
    360浏览器的收藏夹隐藏了,怎么处理?
    如何解决安装好的google浏览器打不开网页的问题?
  • 原文地址:https://www.cnblogs.com/liyexin/p/12782572.html
Copyright © 2011-2022 走看看