思路: 根据题意,会议结束时剩下的成员最多为1人或2人。假设剩下的成员数量为x,那么在每一次讨论中,至少有x个成员同意,否则会议结束后剩下的成员数量就会少于x。因此,我们可以遍历所有可能的剩下成员数量x(x=1或2),对于每个x,遍历所有讨论,统计同意和不同意的成员数量,根据条件判断剩下的成员数量是否与x一致,如果一致则记录下来,最后输出满足条件的最大剩下成员数量。

具体步骤如下:

  1. 读入n和k。
  2. 创建一个二维数组t,大小为n*k,用来存储每个成员对每个讨论的观点。
  3. 初始化变量maxNum为0,用来记录满足条件的最大剩下成员数量。
  4. 遍历所有可能的剩下成员数量x,即x=1或2。
  5. 遍历所有讨论,统计同意和不同意的成员数量,分别用变量agree和disagree来记录。
  6. 根据条件判断剩下的成员数量是否与x一致,如果一致则更新maxNum的值。
  7. 输出maxNum的值。

时间复杂度分析: 遍历所有可能的剩下成员数量x需要O(2)的时间复杂度,遍历所有讨论需要O(k)的时间复杂度,因此总时间复杂度为O(2*k)=O(k)。

空间复杂度分析: 创建的二维数组t需要O(n*k)的空间复杂度。

代码实现如下:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector<vector<char>> t(n, vector<char>(k));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            cin >> t[i][j];
        }
    }
    int maxNum = 0;
    for (int x = 1; x <= 2; x++) {
        for (int j = 0; j < k; j++) {
            int agree = 0, disagree = 0;
            for (int i = 0; i < n; i++) {
                if (t[i][j] == '+') {
                    agree++;
                } else {
                    disagree++;
                }
            }
            if ((agree >= x && disagree < x) || (agree < x && disagree >= x)) {
                maxNum = max(maxNum, n - disagree);
            }
        }
    }
    cout << maxNum << endl;
    return 0;
}
``
议题politicscpp时间限制:1s 空间限制:512 MB【问题描述】在一个包括你自己成员 1有 n 个成员的辩论俱乐部中有 k 个议题需要按顺序讨论。 在每次讨论中成员都会表达他们同意或不同意的观点。我们将 Y 定义为同意的成员数量N 为不同意的成员数量。每次讨论后会员根据以下标准离开俱乐部:·如果同意的成员多于不同意的成员YN则所有不同意的成员都会离开俱乐部。·如果不同意的成员多于同意的

原文地址: http://www.cveoy.top/t/topic/iHb8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录