zoukankan      html  css  js  c++  java
  • [Codeforces Round #443]Div2 C Short Program

    给你一串$n$个按顺序的位运算操作(&,|,^),形如"opt x",要求用不超过5行的位运算,按顺序操作出来和那个结果是一样的。$(n<=5e5,0<=x<1024)$


    会了之后很水。构造。。

    首先确定每一位是原来是$1$会变成啥,是$0$会变成啥。

    然后用位运算构造。我太菜md居然不会......

    具体如下

    假设最后要或$a$,与$b$,异或$c$。初值$a=0,b=1023,c=0$。如果啥也不改输入啥还是输出啥。

    $0 ightarrow1,1 ightarrow0$  取反,这位要异或,$a$的这位赋为$1$。

    $0 ightarrow0,1 ightarrow0$  清零,这位要与上$0$,$b$的这位赋为$0$。

    $0 ightarrow1,1 ightarrow1$  需要填上$1$,这位要或,$c$的这位赋为$1$。


    #include<bits/stdc++.h>
    using namespace std;
    int a,b,c,x,y;
    int main(){
        int n;cin>>n;x=b=1023;
        for(int i=1;i<=n;i++){
            char ch[10];scanf("%s",ch);
            int t;cin>>t;
            if(ch[0]=='|')x|=t,y|=t;
            if(ch[0]=='&')x&=t,y&=t;
            if(ch[0]=='^')x^=t,y^=t;
        }
        for(int i=0;i<10;i++){
            int f=1<<i;
            int p=x&f,q=y&f;
            if(p&&q)a+=f;
            if(!p&&!q)b-=f;
            if((!p)&&q)c+=f;
        }
        cout<<"3
    ";
        cout<<"| "<<a<<endl;
        cout<<"& "<<b<<endl;
        cout<<"^ "<<c<<endl;
    }

    当时瓜田里没人想出来,,即使是看了yyc大佬的简要题解,,嗷嗷嗷还是太菜了。。

  • 相关阅读:
    [转]SVN 乱码问题
    [转]自己做 Visual Studio 2013 代码折叠插件
    [Java]一步一步学 Web
    [转]SQL Server 结构读取
    [转][c#]注册表经验集
    [转]加密经验集 => C#
    [转]Oracle 连接dll
    《高效能程序员的修炼》读书笔记
    Blend for Visual Studio 2013
    ASP.NET中服务器控件的生命周期
  • 原文地址:https://www.cnblogs.com/orzzz/p/7743631.html
Copyright © 2011-2022 走看看