起床困难综合症
作者:互联网
题目:
https://ac.nowcoder.com/acm/problem/17857
思路:
用全0和全1的串分别去经历一遍
位运算时每位都是独立的
0最终变1 ,肯定是1;
1最终是1,如果这个数这一位取了1且<=m,那么这位是1;
#include<stdio.h>
int main()
{
unsigned int n,m,s1,s0;
s1=(1<<30)-1,s0=0;
scanf("%d %d",&n,&m);
char a[5];
int x;
for(int i=1;i<=n;i++)
{
getchar();
scanf("%s %d",a,&x);
if(a[0]=='A')
s0&=x,s1&=x;
else if(a[0]=='O')
s0|=x,s1|=x;
else
s0^=x,s1^=x;
}
int ans=0;
int r=0;
for(int j=31;~j;j--)
{
if((s0>>j)&1)
ans+=(1<<j);
else if(((s1>>j)&1)&&((r+(1<<j)<=m)))
r+=(1<<j),ans+=(1<<j);
}
printf("%d\n",ans);
}
标签:int,s1,s0,困难,起床,else,综合症,ans,scanf 来源: https://www.cnblogs.com/aacm/p/14847844.html