zoukankan      html  css  js  c++  java
  • [ 9.26 ]CF每日一题系列—— 771B递推问题

    Description:

      给定你命名的规律,1-10个字符,开头必须大写,最多有50个名字,然后告诉你有n个人,判断区间长度为k,那么你将得到n - k + 1个答案(YES or NO) 表示1 - k,2 -k+1,n - K + 1-— n这些人里面是否没有重名,YES没有,NO有,让你推出一种名字的组合方式

    Solution:
      首先先跑出一个名字数组,这个题目要往后看,所以应该是从后往前推n - k + 2 到 n的名字没有要求,所以我们命名各不相同,从n - k + 1开始,如果是YES必须给他一个新的名字,如果是NO,那么给他一个重复的名字,为了不影响后面的答案,所以我们给他i + k -1个名字,也就是这个区间段的最后一个人的名字啦

    Code:
      

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    using namespace std;
    string name[55];
    int main()
    {
        for(int i = 0;i < 52;++i)
        {
            if(i < 26)name[i] = 'A' + i;
            else name[i] = name[i - 26] + 'a';
        }
        int n,k;
        int nameid = 0;
        string outname[55];
        string op[55];
        while(~scanf("%d%d",&n,&k))
        {
    
            for(int i = 0;i < n - k + 1;++i)
            {
                cin>>op[i];
            }
            for(int i = n - 1;i >= 0;--i)
            {
                if(n - i < k)outname[i] = name[nameid++];
                else
                {
                    if(op[i][0] == 'Y')
                    {
                        outname[i] = name[nameid++];
                    }
                    else
                    {
                        outname[i] = outname[i+k-1];
                    }
                }
            }
            for(int i = 0;i < n-1;++i)
            {
                cout<<outname[i]<<" ";
            }
            cout<<outname[n-1]<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    【一周读书】哲学家,你们都干了些什么?
    我的软件工程课目标
    【一周读书】《把时间当作朋友》《一个人就是一支骑兵》读书心得
    LANMP安全配置学习之PHP安全配置
    XXE漏洞学习
    利用bWAPP学习SSRF
    Vulnhub靶场之DC-1
    74CMS4.1.2.4版本黑盒测试
    业务逻辑漏洞——浅谈验证码漏洞
    bWAPP靶场之HTML Injection(GET)
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/9710792.html
Copyright © 2011-2022 走看看