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大佬的简要题解,,嗷嗷嗷还是太菜了。。

  • 相关阅读:
    vue系列——数据请求
    优化记录
    优化记录
    正则
    跨域问题
    原型链之prototype/__proto__/constructor
    vue系列——组件数据通讯(二)
    vue系列——组件数据通讯(一)
    ES6(一)
    ES5总结
  • 原文地址:https://www.cnblogs.com/orzzz/p/7743631.html
Copyright © 2011-2022 走看看