[ 9.26 ]CF每日一题系列—— 771B递推问题
Posted df-yimeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ 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; }
以上是关于[ 9.26 ]CF每日一题系列—— 771B递推问题的主要内容,如果未能解决你的问题,请参考以下文章