QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#879672 | #9980. Boolean Function Reconstruction | as_lyr | WA | 0ms | 3840kb | C++14 | 1.1kb | 2025-02-02 10:27:15 | 2025-02-02 10:27:16 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N=16;
int n;
char s[1<<N];
bool o[1<<N];
int f[1<<N];
int pop[1<<N];
void solve(){
scanf("%d",&n);
scanf("%s",s);
for(int i=0;i<(1<<n);i++)
o[i]=s[i]-'0';
for(int i=0;i<(1<<n);i++)
f[i]=o[i];
for(int p=0;p<n;p++)
for(int i=0;i<(1<<n);i++)
if(i&(1<<p))
f[i]+=f[i^(1<<p)];
for(int i=0;i<(1<<n);i++)
if(f[i]&&o[i]==0){
puts("No");
return ;
}
for(int i=1;i<(1<<n);i++)
pop[i]=pop[i>>1]+(i&1);
puts("Yes");
for(int i=0;i<(1<<n);i++)
o[i]=f[i]==1;
int cnt=0;
for(int i=0;i<(1<<n);i++)
cnt+=o[i];
if(cnt>1)
putchar('(');
bool a[2]={0,0};
for(int i=0;i<(1<<n);i++){
if(o[i]==0)
continue;
if(i==0){
putchar('T');
continue;
}
if(a[0])
putchar('|');
a[0]=1,a[1]=0;
if(pop[i]>1)
putchar('(');
for(int p=0;p<n;p++)
if(i&(1<<p)){
if(a[1])
putchar('&');
a[1]=1;
putchar(p+'a');
}
if(pop[i]>1)
putchar(')');
}
if(cnt>1)
putchar(')');
putchar('\n');
}
int main(){
int T;
scanf("%d",&T);
while(T--)
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3840kb
input:
7 2 0001 2 0111 2 1111 3 00010111 1 10 2 0101 5 00000000000000000000000000000001
output:
Yes (a&b) Yes (a|b) Yes T Yes ((a&b)|(a&c)|(b&c)) No Yes a Yes (a&b&c&d&e)
result:
wrong answer invalid expressions 8 (test case 4)