蒟蒻WA on #6求调
查看原帖
蒟蒻WA on #6求调
760883
Yoimiyamwf楼主2023/10/19 17:07

rt,感谢神犇!!!

Ans:131071
Output:131070
#include <bits/stdc++.h>
#define in inline
#define rint register int
#define r(a) runtimerror(a)
#define w(a) wronganswer(a)
#define wl(a) wronganswer(a),putchar('\n')
#define ws(a) wronganswer(a),putchar(' ')
using namespace std;
typedef long long ll;
int n,m,x,len;
string opt[100010];
bitset <30> t[100010],num,ans;
template <typename t> in void runtimerror(t &a){
    bool flag=false;char ch=getchar();a=0;
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') flag=true;
    for(;isdigit(ch);ch=getchar()) a=(a<<3)+(a<<1)+(ch^48);
    a=flag?~a+1:a;
}
template <typename t> void compilerror(t a){
    if(a>9) compilerror(a/10);
    putchar(a%10^48);
}
template <typename t> in void wronganswer(t a){
    if(a<0) a=-a,putchar('-');
    compilerror(a);
}
in int trans(){
    for(rint i=1;i<=n;i++){
        if(opt[i]=="AND") ans&=t[i];
        else if(opt[i]=="OR") ans|=t[i];
        else ans^=t[i];
    }
    return ans.to_ulong();
}
int dp(int pos,bool lim){
    if(!pos) return trans();
    if(lim&&num[pos]==0) return dp(pos-1,lim);
    int want=1;
    for(rint i=n;i;i--){
        if(opt[i]=="AND"&&!t[i][pos]){want=0;break;}
        else if(opt[i]=="OR"&&t[i][pos]){want=0;break;}
        else if(opt[i]=="XOR"&&t[i][pos]) want^=1;
    }
    ans[pos]=want;
    return dp(pos-1,lim&&want==num[pos]);
}
int main(){
    r(n),r(m);
    num=m;
    for(rint i=1;i<=n;i++){
        cin>>opt[i],r(x);
        t[i]=x;
    }
    w(dp(30,true));
    return 0;
}
2023/10/19 17:07
加载中...