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;
    }
    
  • 相关阅读:
    js 屏蔽非数字字符输入
    javaScript注释变成颜文字
    canvas 画图优化
    快速回到顶部
    多行文字垂直居中
    innerHTML 与 outerHTML区别
    高内聚、低耦合
    webstorm快捷键
    HTML、CSS规范
    RabbitMQ学习笔记(3)----RabbitMQ Worker的使用
  • 原文地址:https://www.cnblogs.com/lokiii/p/9630394.html
Copyright © 2011-2022 走看看