zoukankan      html  css  js  c++  java
  • 起床困难综合症 NOI_2014_D1T1

     这道题的正解其实没什么好说的,反而是部分分设计非常巧妙。

      之所以要单开一篇是因为当时机房的部分同学刚学位运算,我拿这个题去讲想毒瘤大家一下,于是做了一个挺好看的课件。

      ppt -> pdf -> jpg 是真的麻烦。(最后也没成功)

      开始一个大工程...手工截图!

      

     

    最后贴一下代码。

    # include <cstdio>
    # include <iostream>
    # include <cmath>
    # define R register int
    
    using namespace std;
    
    int xx,n,Max=0,M,h=0,d[100009],y[100009],m[40],ans[40];
    long long Ans=0;
    char a[5];
    char cc;
    bool now,f=true;
    
    bool check(bool x,int l)
    {
        for (R i=1;i<=n;i++)
        {
            now=d[i]&(1<<(l-1));
            if(y[i]==1)  x=x&now;
            if(y[i]==2)  x=x^now;
            if(y[i]==3)  x=x|now;
        }
        return x;
    }
    
    int read()
    {
        xx=0;
        cc=getchar();
        while (!isdigit(cc)) cc=getchar();
        while (isdigit(cc))  xx=(xx<<3)+(xx<<1)+(cc^48),cc=getchar();
        return xx;
    }
    
    int main()
    {
        cin>>n>>M;
        for (R i=1;i<=n;i++)
        {
            scanf("%s",a);
            d[i]=read();
            if(a[0]=='A') y[i]=1;
            if(a[0]=='X') y[i]=2;
            if(a[0]=='O') y[i]=3;
            Max=max((int)log2(d[i])+1,Max);
        }
        while (M)
        {
            m[++h]=M&1;
            M=M>>1;
        }
        Max=max(Max,h)+1;
        for (R i=Max;i>=1;i--)
        {
            if((m[i]==1||f==false)&&check(1,i)==1&&check(0,i)==0)
                ans[i]=1;
            else
            {
                if(check(0,i)) ans[i]=1;
                if(m[i]==1) f=false;    
            }    
        }
        for (R i=Max;i>=1;i--)
          Ans=(Ans<<1)|ans[i];
        cout<<Ans;
        return 0;
    }
    起床困难综合症
  • 相关阅读:
    栈:删除最外层的括号 (Leetcode 1021 / 155 / 1172 / 剑指31 / 面试 03.03)
    JDBC: Druid连接池
    JDBC: C3P0
    JDBC: C3P0
    JDBC: C3P0连接池
    JDBC: DBCP连接池
    JDBC: 数据库连接池
    JDBC: JDBC 控制事务
    JDBC: 预处理对象
    wpf 键盘快捷键响应
  • 原文地址:https://www.cnblogs.com/shzr/p/9117074.html
Copyright © 2011-2022 走看看