zoukankan      html  css  js  c++  java
  • bzoj 3668: [Noi2014]起床困难综合症【贪心】

    原来cerr在bzoj上回RE?!
    从高位到低位贪心,注意取01结果相同时取0,这样就可以去掉limit了

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int N=100005;
    int n,m,b[N][35],a[N],tot,ans,mx;
    char c[N][5];
    bool lm=1;
    int read()
    {
        int r=0,f=1;
        char p=getchar();
        while(p>'9'||p<'0')
        {
            if(p=='-')
                f=-1;
            p=getchar();
        }
        while(p>='0'&&p<='9')
        {
            r=r*10+p-48;
            p=getchar();
        }
        return r*f;
    }
    int clc(int w,int x)
    {
        for(int i=1;i<=n;i++)
        {
            if(c[i][0]=='A')
                x=x&b[i][w];
            else if(c[i][0]=='O')
                x=x|b[i][w];
            else
                x=x^b[i][w];
        }
        return x;
    }
    int main()
    {
        n=read(),m=read();
        for(int i=1;i<=n;i++)
        {
            scanf("%s",c[i]);
            int x=read();
            while(x)
                b[i][++b[i][0]]=x&1,x>>=1;
            mx=max(mx,b[i][0]);
        }
        while(m)
            a[++tot]=m&1,m>>=1;
        for(int w=max(mx,tot);w>=1;w--)
        {//cerr<<"lm"<<lm<<endl;
            if(lm&&a[w]==0)
                ans=ans<<1|clc(w,0);//,cerr<<clc(w,0)<<endl;
            else
            {
                int x0=clc(w,0),x1=clc(w,1);//cerr<<x0<<" "<<x1<<endl;
                if(x0>=x1)
                    ans=ans<<1|x0,lm=0;//,cerr<<"======"<<endl;
                else
                    ans=ans<<1|x1;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    python 函数和函数名的应用
    Python 文件操作
    django报错信息解决方法
    小数据池、代码块以及深浅拷贝
    python 字典的增删改查
    ps 整理通道
    unity 捏脸相关
    Unity3D Blend Shape简析
    unity 乳摇
    爱丽丝的头发是怎么制作的
  • 原文地址:https://www.cnblogs.com/lokiii/p/9630394.html
Copyright © 2011-2022 走看看