社区讨论

蒟蒻WA on #6求调

P2114[NOI2014] 起床困难综合症参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo10r0fe
此快照首次捕获于
2023/10/22 13:19
2 年前
此快照最后确认于
2023/11/02 12:48
2 年前
查看原帖
rt,感谢神犇!!!
CPP
Ans:131071
Output:131070
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...