题解 | #起床困难综合症#

起床困难综合症

https://ac.nowcoder.com/acm/problem/17857

通过一个全0 和 全1的二进制int数进行一系列操作可以得到每一位上如果填0或1的时候是什么样的情况。然后从前向后遍历二进制位,如果当前位可以由0变化成1那么可以直接将结果伤害的这一位填上1,如果只能由1变成1那么就需要判断当前的位上的原始伤害会不会超过范围,如果超过了就意味着无法填1。
#include <bits/stdc++.h>

using namespace std;

inline int read() {
    int x=0, y=1;
    char c = getchar();
    while (c=='-') {
        y = -y;
        c = getchar();
    }
    while (c>='0'&&c<='9') {
        x = x*10+(c-'0');
        c = getchar();
    }
    return x;
}

int main() {
    int n = read(), m = read();
    int all0=0, all1=-1;
    while (n--) {
        string op;
        cin>>op;
        getchar();
        int t = read();
        if (op[0]=='A') {
            all0 &= t; all1 &= t;
        } else if (op[0]=='O') {
            all0 |= t; all1 |= t;
        } else {
            all0 ^= t; all1 ^= t;
        }
    }
    int i = 0, ans=0;
    for (i = (1<<30);i;i>>=1) {
        if (all0&i) ans|=i;
        else if (all1&i&&i<=m) {
            m ^= i;
            ans |= i;
        }
    }
    cout<<ans;
    return 0;
}


全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 12:23
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 11:45
你不要过来啊啊啊啊啊啊啊
码农索隆:对面:“今天你不面也得面”
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务