BZOJ 3668 [NOI2014]起床困难综合症

Posted pigba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 3668 [NOI2014]起床困难综合症相关的知识,希望对你有一定的参考价值。

题意:有一些位运算操作,找出一个小于m的整数使其经过这些操作后得到的数最大.

对于这个整数的每一位之间运算互不影响,所以我们从高位到地位贪心填二进制数,使其这一位能得到1

#include<cstdio>
using namespace std;
const int N=1e5+5;
int n,m;
int op[N],w[N];
char s[233];
int calc(int x)
{
  for(int i=1;i<=n;i++)
    {
      if(op[i]==1) x&=w[i];
      if(op[i]==2) x|=w[i];
      if(op[i]==3) x^=w[i];
    }
  return x;
}
int main()
{
  scanf("%d%d",&n,&m);
  for(int i=1;i<=n;i++)
    {
      scanf("%s",s);
      if(s[0]==A) op[i]=1;
      else if(s[0]==O) op[i]=2;
      else op[i]=3;
      scanf("%d",&w[i]);
    }
  int u=1,qaq=calc(0);
  for(;u<=m;u<<=1);
  u>>=1;
  int ans=0;
  for(;u;u>>=1)
    {
      if(qaq&u) continue;
      if(ans+u>m) continue;
      if(u&calc(u))ans+=u;
    }
  printf("%d\n",calc(ans));
  return 0;
}

 

以上是关于BZOJ 3668 [NOI2014]起床困难综合症的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ_3668_[Noi2014]起床困难综合症_贪心

BZOJ3668:[NOI2014]起床困难综合症——题解

BZOJ3668: [Noi2014]起床困难综合症

[BZOJ3668] [Noi2014] 起床困难综合症 (贪心)

刷题BZOJ 3668 [Noi2014]起床困难综合症

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