其他分享
首页 > 其他分享> > 起床困难综合症

起床困难综合症

作者:互联网

题目:

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