题解 | 小红吃药
小红吃药
https://www.nowcoder.com/practice/ea822e4a974e4ab0bc72c203adce7d44
//活动地址: 牛客春招刷题训练营 - 编程打卡活动 #include <iostream> #pragma clang diagnostic push #pragma ide diagnostic ignored "cppcoreguidelines-narrowing-conversions" #pragma ide diagnostic ignored "hicpp-signed-bitwise" #pragma GCC optimize ("Ofast,unroll-loops") #pragma GCC optimize("no-stack-protector,fast-math") #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; typedef pair<int, int> pii; typedef pair<double, double> pdd; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<double> vd; typedef vector<string> vs; typedef vector<vi> vvi; typedef vector<vvi> vvvi; typedef vector<vll> vvll; typedef vector<vvll> vvvll; typedef vector<pii> vpii; typedef vector<vpii> vvpii; typedef vector<pll> vpll; typedef vector<vpll> vvpll; typedef vector<pdd> vpdd; typedef vector<vd> vvd; #define yn(ans) printf("%s\n", (ans)?"Yes":"No"); #define YN(ans) printf("%s\n", (ans)?"YES":"NO"); template<class T> bool chmax(T &a, T b) { if (a >= b) return false; a = b; return true; } template<class T> bool chmin(T &a, T b) { if (a <= b) return false; a = b; return true; } #define FOR(i, s, e, t) for ((i) = (s); (i) < (e); (i) += (t)) #define REP(i, e) for (int i = 0; i < (e); ++i) #define REP1(i, s, e) for (int i = (s); i < (e); ++i) #define RREP(i, e) for (int i = (e); i >= 0; --i) #define RREP1(i, e, s) for (int i = (e); i >= (s); --i) #define all(v) v.begin(), v.end() #define pb push_back #define qb pop_back #define pf push_front #define qf pop_front #define maxe max_element #define mine min_element ll inf = 1e18; #define DEBUG printf("%d\n", __LINE__); fflush(stdout); template<class T> void print(vector<T> &v, bool withSize = false) { if (withSize) cout << v.size() << endl; REP(i, v.size()) cout << v[i] << " "; cout << endl; } mt19937_64 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count()); int __FAST_IO__ = []() { std::ios::sync_with_stdio(0); std::cin.tie(0); std::cout.tie(0); return 0; }(); #include<bits/stdc++.h> using namespace std; #define mod 1000000007 typedef long long ll; #define int long long inline ll read() // void int &n { ll s=0,f=1; char c=getchar(); while(c>'9'||c<'0') { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') { s=(s<<1)+(s<<3)+c-'0'; c=getchar(); } return s*f; } inline void write(int n) { if(n<0) { putchar('-'); n=-n; } if(n>10) write(n/10); putchar(n%10+'0'); } int jiechen(int n) { int sum = 1; for (int i = 2; i <= n; i++) sum = sum * i % mod; return sum % mod; } int qsm(ll a, ll p) { ll s=1; while(p) { if(p&1) s=s*a%mod; a=a*a%mod; } return s; } ll isprime(ll x) { if(x<2) return 0; for(int i=2;i<=x/i;i++) if(x%i==0) return 0; return 1; } bool cmp(int x, int y){ return x>y; } const int N=3e6+10; const int M =100000; void solve(){ // 看题一眼发现根本不是简但的难度 然后看了一下76gg的题解 感觉还好 主要考位运算 int n,q,m; cin>>n; string s; cin>>s; int state=0; for(int i=0;i<s.size();i++){ if(s[i]=='1')state|=1<<i; } cin>>m; vector<pair<int,int>>p(m); for(int i=1;i<=m;i++){ string a,b; cin>>a>>b; int tr=0,si=0; for(int i=0;i<a.size();i++){ if(a[i]=='1')tr|=1<<i; if(b[i]=='1')si|=1<<i; } p[i]={tr,si}; } cin>>q; while(q--){ int md; cin>>md; state&=~(state&p[md].first); state|=p[md].second; cout<<__builtin_popcount(state)<<"\n"; } } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int _=1; //cin>>_; while(_--) { solve(); } return 0; } // 活动地址: 牛客春招刷题训练营 - 编程打卡活动 // #include <bits/stdc++.h> // using namespace std; // int main() { // int n; // cin >> n; // string initial; // cin >> initial; // // 将初始症状转换为整数 // int state = 0; // for(int i = 0; i < n; i++) { // if(initial[i] == '1') { // state |= (1 << i); // } // } // int m; // cin >> m; // vector<pair<int, int>> medicines(m); // 每副药的治疗效果和副作用 // // 读入每副药的信息 // for(int i = 0; i < m; i++) { // string treat, side; // cin >> treat >> side; // int treat_mask = 0, side_mask = 0; // for(int j = 0; j < n; j++) { // if(treat[j] == '1') treat_mask |= (1 << j); // if(side[j] == '1') side_mask |= (1 << j); // } // medicines[i] = {treat_mask, side_mask}; // } // int k; // cin >> k; // // 模拟服药过程 // while(k--) { // int med; // cin >> med; // med--; // 转换为0-based索引 // // 更新症状状态 // // state &=medicines[med].first; // state &= ~(state & medicines[med].first); // 去除被治愈的症状 // state |= medicines[med].second; // 添加副作用症状 // // 统计当前症状数量 // cout << __builtin_popcount(state) << endl; // } // return 0; // }