CSDN 编程竞赛十七期题解

竞赛总览

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

竞赛题解

题目1、判断胜负

已知两个字符串A, B。连续进行读入n次。每次读入的字符串都为A|B。输出读入次数最多的字符串。

#include 
#include 
#include 

int result [2] = {1, 0};

int main () {
    int n;
    scanf ("%d", &n);
    std::string data [2];
    std::cin >> data [0];
    for (int i = 1; i < n; i++) {
        std::string str;
        std::cin >> str;
        if (str != data [0]) data [1] = str;
        result [str == data [0] ? 0 : 1] += 1;
    }
    if (result [0] == result [1]) {
        printf ("dogfall");
        return 0;
    }
    return 0;
}

这题属于初级题目,不涉及数据结构,只要会用char*或者string类就能做出来。

统计字符串A和B的数量,输出数量多的那一个即可。 

题目2、买铅笔

P老师需要去商店买n支铅笔作为小朋友们参加编程比赛的礼物。她发现商店一共有3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过n支铅笔才够给小朋友们发礼物。现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少n支铅笔最少需要花费多少钱。

这道题目比较简单。使用循环分别计算每种情况的开销,再输出最低价格即可。

题目3、拯救爱情

小艺酱走到一个花之占卜店中。店员小Q看到小艺酱可怜的样子,允许小艺酱免费占卜一次。花瓣占卜:1.一瓣“在一起”,一瓣“不在一起”;开始的花瓣表示“在一起”。2.直到最后一个花瓣落地游戏结束。3.可以选择多朵花,选择撕一朵花就必须撕完。

这道题可以用动态规划的方法解决。也可以使用贪心算法,对花瓣分奇偶,奇数列表降序排序,结果为前奇数个奇数和全部的偶数的和。

不过这道题目的描述有点bug,所以如果猜不到哪里有问题是无法AC的。鉴于写点东西就会有人来评论区恶心人,我只提一个关键点,这道题答案有上限,算出来的结果超了上限肯定就WA了。第七期也是,第一次写题解提到容斥定理,有人说“第四题你确定你是对的?容斥定理显然不是指这个容斥。”,结果我一看他写得题解里照样是容斥定理,笑了。那是两句话,自己要连起来当一句话,然后没读懂怪我吗?还有上次喷泉没给出水点那题,我都说了我是纯骗分的,还有人搁那各种说我是托,幸亏我没给骗分代码,以后也不会给了。

题目4、拯救公主

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

这道题不是很难,输入数据之后可以先将地图对齐,降低难度,之后再进行寻路。

寻路之前,需要考虑几种特殊情况。

1、药草可能会在岩石上,这时候不用寻路,直接输出NO。

2、入口在左上角,如果这个位置是岩石,也输出NO即可。

3、还有一种情况是3行的同一列出现三个岩石,这时肯定是过不去的。

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