CSDN 编程竞赛三十八期题解

竞赛总览

CSDN 编程竞赛三十八期:比赛详情 (csdn.net)

竞赛题解

题目1、代写匿名信

小Q想要匿名举报XX领导不务正业!小Q害怕别人认出他的字迹。他选择从报纸上剪裁下来英文字母组成自己的举报信。现在小Q找来了报纸,和自己的举报信的Txt。你能帮他确定一下是否能够完成匿名信吗?

std::string check (std::string words, std::string msg) {
    std::string result = "Yes";
    for (int i = 0; i < words.length (); i++) data [words [i]] += 1;
    for (int i = 0; i < msg.length (); i++) {
        if (data [msg [i]] > 0) continue;
        else {
            result = "No";
            break;
        }
    }
}

这道题有个隐藏条件,报纸是无限的,也就是说报纸上的字符可以用无限次,来组装成匿名信。

如果报纸上的字符也是有限的,必须不少于匿名信的字符数量,那么只需将条件的大于改成趋近于(即 --> 符号)即可。

此外,由于输入数据中可能含有空格,因此必须用getline函数来读入字符串,不能直接使用cin输入,否则无法AC。

题目2、寻因找祖

寻找因子个数为n的最小整数。

这道题目和2021年蓝桥杯省赛的货物摆放一题有些相似点,均考察对因子个数的判断问题。

区别在于,本题中的因子全部相乘可以大于这个数本身,只要是这个数的因子,都可以算在其中,而货物摆放一题的因子都是质因子,可以用分解法计算得出。

例如:

因子个数为1的最小整数是1、因子个数为2的最小整数是2。

因子个数为3的最小整数是4,其因子为1、2、4。

因子个数为4的最小整数是6,其因子为1、2、3、6。

因子个数为5的最小整数是16,其因子为1、2、4、8、16。

因子个数为6的最小整数是12,其因子为1、2、3、4、6、12。

这道题很有特点,除了直接判断因子之外,还可以用打表法解决,一次性将所有数的因子都计算出来,再统计含指定因子个数的最小整数。之后,问题问的是多少个因子,就直接对应的最小整数。

题目3、小Q新式棋盘

已知棋盘大小为n*n。每个位置都有自己的权值q。该棋盘中有多少对行权值和小于列权值和。

第十四期竞赛原题,可以用前缀和算法解决。

题目4、拯救公主

在Flower Kingdom里,住着一位美丽的公主Ana。有一天Ana得了一种怪病,神医告知国王,在遥远的幽谷中有一种药能治愈Ana,但是神医只有一份不完整的地图。地图的描述如下:该地图共有3行,第一行有m列,m为奇数,第二行有m+1列,第三行有m+2列;每一行用一个字符串表示,只有【两种字符】;‘.'表示草地,可以从它上面通过,‘*’表示岩石,每一行最多一个‘*’;入口在左上角,由于在对角线方向上,因此即使对角线两边都有岩石,但是缝隙较大,人可以通过,故人可以向八个方向行走; 真实地图是由该地图的【每一行无限循环】得到的,这种神奇的药草就生长在第x行第y列的草地上。药草可能会在岩石上;国王决定派遣勇敢的骑士David前去寻找拯救公主的解药;现在聪明的你是否知道David能否找到该药?

这道题在第十七期出现过,需要注意一些特殊情况:

1、药草可能会在岩石上。

2、入口可能会在岩石上。

3、如果在地图同一列位置,每行都有岩石,并且这个位置出现在药草前面,那么必定无法得到药草。

你可能感兴趣的:(CSDN,竞赛题解,算法,c++)