每日一题 | QQ群撩妹问题

时间:2022-07-23
本文章向大家介绍每日一题 | QQ群撩妹问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

昨日题解

每日一题 | 老板出的下棋问题

codeforces的B题,链接:https://codeforces.com/contest/1395/problem/B

这是一道模拟题,题目难度不大,关键点在于我们需要找到一个遍历棋盘的顺序,使得每个位置可以刚好遍历一次,并且处理起来不会非常麻烦。

题目给的两个样例分别是蛇形遍历以及乱序遍历的:

由于我们起始位置不确定,并且矩阵的大小也不确定,所以如果蛇形遍历会比较麻烦。右侧的这种乱序遍历也并不简单,因为一旦我们遇到了边界或者是之前已经遍历过的位置,后续的处理会比较麻烦,因为我们不知道还有哪些位置空着。所以最好的方法就是设计一个合适的顺序,使得我们按照这个顺序遍历可以保证所有元素只遍历一次。

我设计的顺序是从左往右逐行遍历,如果遇到边界,则回到行起始位置。如果起始位置已经遍历过,说明这一行已经遍历完毕,那么我们往上移动一行。由于我们是往上一行一行遍历的,所以当我们第一行遍历结束的时候,需要跳转到最后一行。

画成图的话大概是这个样子:

当然这题方法不唯一,可以有很多种解法。

AC代码:

import sys

n, m, x, y = map(int, input().split(' '))

chess = [[0 for _ in range(m+2)] for _ in range(n+2)]


for i in range(n):
    for j in range(m):
        chess[x][y] = 1
        print(x, y)
        x_, y_ = x, y+1
        # 如果到了行末,尝试移动到行首
        if y_ > m or chess[x][y_] == 1:
            y_ = 1
            # 如果行首处也遍历过了,说明整行已经遍历完了
            if chess[x][y_] == 1:
                x_ = x-1
                y_ = y
                if x_ < 1:
                    x_ = n

        x, y = x_, y_

今日问题

QQ群撩妹问题

从前有一个人叫做Du,喜欢在qq群里调戏管理员。我们都知道管理员有禁言功能,如果Du调戏得过分,管理员会禁言他d天。

已知Du有n句不同的撩妹的话术,每天只能发一句并且每个话术最多只能使用一次。每个话术有一个杀伤力,如果,m是管理员的心情,那么管理员就会把Du禁言。Du希望自己在n天当中积累的杀伤力之和最大,请问这个最大值是多少。

样例

- END -