题解:B4175 [BCSP-X 2024 6 月初中组] 打孔纸带

· · 题解

题意

题目讲得非常清楚,这里就不再赘述。

思路

在每一个位置判断 01 的个数,用两个 0 做位运算结果都是 0,无需特判,但是如果是一个 1 一个 0,和两个 0 的情况,判断不出来,所以每一个位置上肯定都有两个 1 和一个 0

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 60;
int n, ans;
string str[N];

signed main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> str[i];
    for (int i = 0; i < str[1].size(); i++) {
        int cnt0 = 0, cnt1 = 0;
        for (int j = 1; j <= n; j++) {
            if (str[j][i] == '0') cnt0++;
            else cnt1++;
        }
        if (cnt1 == 0) ans = max(ans, 2LL);
        else if (cnt1 == 1 || cnt0 == 0) ans = max(ans, 1LL);
    }
    cout << ans;
    return 0;
}