zoukankan      html  css  js  c++  java
  • 「题解」:位运算

    问题 A: 位运算

    时间限制: 1 Sec  内存限制: 512 MB

    题面


    题面谢绝公开。

    题解


    简单分类讨论。还是得把赛时那愚蠢的分类讨论搬上来。

    三者关系
    与/或/异或
     1 / 1 / 1 :矛盾。与运算为1,二者均为1,异或运算为1,要求二者该位不能相同。
     1 / 1 / 0 :不矛盾。同为1即可。[  (1,1)  /  (1,1)(1,0)(0,1)  /  (1,1)(0,0)  ]
     1 / 0 / 1 :矛盾。同情况1/1/1。
     1 / 0 / 0 :矛盾。
     0 / 1 / 1 :不矛盾。(0,1)/(1,0)两种情况。
     0 / 1 / 0 :不矛盾。(0,1)/(1,0)两种情况
     0 / 0 / 1 :矛盾。
     0 / 0 / 0 :不矛盾。(0,0)即可。
    与/或
     0 / 0 :不矛盾。(0,0)即可。
     0 / 1 :不矛盾。(1,0)/(0,1)即可。
     1 / 0 :矛盾。
     1 / 1 :不矛盾。(1,1)即可。
    与/异或
     0 / 0 :不矛盾。(0,0)即可。
     0 / 1 :不矛盾。(1,0)/(0,1)即可。
     1 / 0 :不矛盾。(1,1)即可。
     1 / 1 :矛盾。
    或/异或
     0 / 0 :(0,0)。
     0 / 1 :矛盾。
     1 / 0 :(1,1)。
     1 / 1 :(1,0)/(0,1)。

    代码:

    #include<bits/stdc++.h>
    #define rint register int
    using namespace std;
    inline void read(long long &a)
    {
    	a=0;int b=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')b=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){a=(a<<3)+(a<<1)+ch-'0';ch=getchar();}
    	a=a*b;return ;
    }
    int T;
    long long ra,ro,rx,ans=1;
    int main()
    {
    	scanf("%d",&T);
    	while(T--)
    	{
    		ans=1;
    		read(ra),read(ro),read(rx);
    		if(ro==-1&&rx==-1){puts("inf");continue;}
    		else if(ra==-1&&ro==-1){puts("inf");continue;}
    		else if(ra==-1&&rx==-1)
    		{
    			for(rint i=0;i<=30;++i)
    				if((ro&(1<<i)))ans*=3;
    			printf("%lld
    ",ans);
    			continue;
    		}
    		else if(ra==-1)
    		{
    			for(rint i=0;i<=30;++i)
    			{
    				if((ro&(1<<i))&&(rx&(1<<i)))ans<<=1;
    				else if((!(ro&(1<<i)))&&(rx&(1<<i))){ans=0;break;}
    				else if((ro&(1<<i))&&(!(rx&(1<<i))))continue;
    				else continue;
    			}
    			printf("%lld
    ",ans);
    			continue;
    		}
    		else if(ro==-1)
    		{
    			for(rint i=0;i<=30;++i)
    			{
    				if((!(ra&(1<<i)))&&(!(rx&(1<<i))))continue;
    				else if((!(ra&(1<<i)))&&(rx&(1<<i)))ans<<=1;
    				else if((ra&(1<<i))&&(!(rx&(1<<i))))continue;
    				else{ans=0;break;}
    			}
    			printf("%lld
    ",ans);
    			continue;
    		}
    		else if(rx==-1)
    		{
    			for(rint i=0;i<=30;++i)
    			{
    				if((!(ra&(1<<i)))&&(!(ro&(1<<i))))continue;
    				else if((!(ra&(1<<i)))&&(ro&(1<<i)))ans<<=1;
    				else if((ra&(1<<i))&&(!(ro&(1<<i)))){ans=0;break;}
    				else continue;
    			}
    			printf("%lld
    ",ans);
    		}
    		else
    		{
    			for(rint i=0;i<=30;++i)
    			{
    				if(ra&(1<<i))
    				{
    					if(ro&(1<<i))
    					{
    						if(rx&(1<<i)){ans=0;break;}
    						else continue;
    					}
    					else{ans=0;break;}
    				}
    				else
    				{
    					if(ro&(1<<i))ans<<=1;
    					else
    					{
    						if(rx&(1<<i)){ans=0;break;}
    						else continue;
    					}
    				}
    			}
    			printf("%lld
    ",ans);
    			continue;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    Java web 例4-7
    JavaScript初步+基本函数
    请求转发和重定向区别
    javaben的设计规则
    Java web 实验五 Servlet过滤器
    关于软件生命周期以及软件过程
    Java web outTime.jsp
    Java web 4-6 update_stu_1.jps
    include指令与动作,请求妆发等同于forward动作
    简单的购物车应用案例 相关代码2
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11711322.html
Copyright © 2011-2022 走看看