比赛 位运算及及其应用题单 评测结果 WWWWAAWWWW
题目名称 调试LED灯 最终得分 20
用户昵称 zqy 运行时间 0.172 s
代码语言 C++ 内存使用 4.48 MiB
提交时间 2025-01-25 11:20:12
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
const int N=5e6+10;
long long x,a,b,l[20];
int n,m;
char s[N],op[35];
int count(int x){
    int cnt=0;
    for(int i=0;i<n;i++)if((x>>i)&1)cnt++;
    return cnt;
}
int main(){
    freopen("testled.in","r",stdin);
    freopen("testled.out","w",stdout);
    scanf("%d",&n);
    scanf("%s",op);
    for(int i=n-1;i>=0;i--){
        if(op[n-1-i]=='1')x|=(1<<i);
    }
    for(int i=0;i<n;i++){
        if(i&1)b|=(1<<i);
        else a|=(1<<i);
    }
    for(int i=0;i<=n;i++)l[i]=(1<<n)-1,l[i]=(l[i]>>i);
    scanf("%d",&m);
    scanf("%s",s+1); 
    for(int i=1,j;i<=m;i++){
        if(s[i]=='a'){
            x|=((1<<n)-1);
        }else if(s[i]=='b'){
            x&=0;
        }else if(s[i]=='c'){
            x^=((1<<n)-1);
        }else if(s[i]=='1'){
            x^=a;
        }else if(s[i]=='2'){
            x^=b;
        }else if(s[i]>='3'&&s[i]<='9'){
            j=s[i]-'0';
            x|=l[n-j];
            x&=l[j];
        }
        
    }
    for(int i=n-1;i>=0;i--){
        if((x>>i)&1)printf("1");
        else printf("0");
    }
    printf("\n%d\n",count(x));
    return 0;
}