# 133. 小红买药

题目链接 (opens new window)

本题是一道直观的模拟题,但也并不简单,很多情况容易漏了,笔试现场可能要多错几次 才能把情况都想到。

主要是三个情况:

  • 小红没症状,药有副作用,统计加一,同时要给小红标记上症状
  • 小红有症状,药治不了,同时也没副症状 ,这时也要统计加一
  • 小红有症状,药可以治,给小红取消症状标记
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, m, q, u;
    cin >> n;
    string s;
    cin >> s;
    cin >> m;
    vector<string> a(m + 1); // 因为后面u是从1开始的
    vector<string> b(m + 1);
    for (int i = 1; i <= m; i++) {
        cin >> a[i] >> b[i];
    }
    cin >> q;
    while (q--) {
        cin >> u;
        int num = 0;
        for (int i = 0; i < n; i++) {
            // s 没症状,但b给了副作用,统计num的同时,要给s标记上症状
            if (s[i] == '0' && b[u][i] == '1') {
                num ++;
                s[i] = '1';
            } 
            // s 有症状,但 a治不了,b也没副症状 
            else if (s[i] == '1' && a[u][i] == '0' && a[u][i] == '0') num++;
            // s 有症状,a 可以治 
            else if (s[i] == '1' && a[u][i] == '1') s[i] = '0';
        }
        cout << num << endl;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
上次更新:: 3/4/2025, 5:49:45 PM
@2021-2025 代码随想录 版权所有 粤ICP备19156078号