20分求diao

P2114 [NOI2014] 起床困难综合症

## 你这个不就是纯暴力?题解都是O(n log m)才过的。 ```cpp #include<bits/stdc++.h> #define lot long long #define maxn 100005 using namespace std; int n,m,ans=0; int op[maxn],k[maxn]; string a; inline int read(){ int XX=0,FF=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') FF*=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ XX=XX*10+ch-48; ch=getchar(); } return XX*FF; } inline void write(int x){ if(x<0){ putchar('-'); x=-x; } if(x>9) write(x/10); putchar(x%10+'0'); } bool opp(bool x,int j){ for(int i=1;i<=n;i++){ int o=(k[i]>>j)&1; if(op[i]==1)x|=o; else if(op[i]==2)x^=o; else x&=o; } return x; } int main(){ n=read(); m=read(); for(int i=1;i<=n;i++){ cin>>a; k[i]=read(); if(a=="OR")op[i]=1; else if(a=="XOR")op[i]=2; else op[i]=3; } for(int i=29;i>=0;i--){ bool x=opp(0,i),y=opp(1,i); if((1<<i)<=m){ if(x>=y)ans|=x<<i; else { ans|=y<<i; m-=1<<i; } } else ans|=x<<i; } write(ans); return 0; } ```
by Loka_i @ 2024-02-19 09:55:54


|