很烦最近代码写的跟屎一样
这题很简单,按位来看,与操作只有与0才有意义并且将当前为置为0,或操作只有或1才有意义并且将当前位置为1,也就是说我们把与0看做将当前位置为0,将或1看做将当前位置为1,
异或也是异或1才有意义(这里的变化比较多,用-1表示输入的初始值,那么
如果 异或1并且当前位为 -1,当前操作变为异或1。
如果 异或1并且当前位为 1,当前操作变为与0。
如果 异或1并且当前位为 0,当前操作变为或1。
)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int op[12];
for(int i=0;i<11;i++) op[i]=-1;
int n;
char c;
int p;
cin>>n;
for(int i=0;i<n;i++)
{
scanf(" %1c%d",&c,&p);
int temp=1;
for(int j=0,temp=1;temp<=1024;j++,temp*=2)
{
if(temp&p) {
if(c=='|') op[j]=1;
if(c=='^') {
if(op[j]==-1) op[j]=2;
else if(op[j]==0) op[j]=1;
else if(op[j]==1) op[j]=0;
else if(op[j]==2) op[j]=-1;
}
}
else {
if(c=='&') op[j]=0;
}
}
}
int yh,yu,huo;
yh=huo=0;
yu=1023;
for(int i=0,temp=1;i<10;i++)
{
temp=1<<i;
if(op[i]==1)
huo+=temp;
if(op[i]==0)
yu-=temp;
if(op[i]==2)
yh+=temp;
}
cout<<3<<endl;
cout<<"| "<<huo<<endl<<"& "<<yu<<endl<<"^ "<<yh<<endl;
}