题解 | 小红吃药

小红吃药

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;
// }

全部评论

相关推荐

Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务