• bzoj3668: [Noi2014]起床困难综合症


    今天状态真的是不一般的差。

    LCT动态维护最大生成树没调出来,费用流又没写出来。

    结果这道煞笔贪心都要重构一次代码才能A

    --------------

    然后做法其实很简单,逆向枚举每一个位,判断当前位经过一连串的运算后能否为1。当前位的值分0和1两种情况。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    char ss[10];
    int main()
    {
        int n,m,x;
        scanf("%d%d",&n,&m);
        
        int A=0,B=(1<<30)-1;
        for(int i=1;i<=n;i++)
        {
            scanf("%s%d",ss+1,&x);
            if(ss[1]=='A') A&=x, B&=x;
            if(ss[1]=='O') A|=x, B|=x;
            if(ss[1]=='X') A^=x, B^=x;
        }
        int now=0,ans=0;
        for(int i=30;i>=0;i--)
        {
            int k=(1<<i);
            bool a=(A&k),b=(B&k);
            if(a==false&&b==false)continue;
            else if(a==true)ans+=k;
            else if(now+k<=m)now+=k,ans+=k;
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    数据结构之线段树
    数据结构之线段树
    数据结构之树状数组
    codevs1073 家族
    codevs1069 关押罪犯
    codevs1001 舒适的路线
    codevs1282 约瑟夫问题
    codevs1081 线段树练习 2
    codevs1225 八数码难题
    codevs1080 线段树练习
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8516460.html
Copyright © 2020-2023  润新知