QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#869729#9980. Boolean Function ReconstructionAndyqian7WA 40ms3584kbC++262.4kb2025-01-25 13:09:182025-01-25 13:09:25

Judging History

你现在查看的是最新测评结果

  • [2025-01-25 13:09:25]
  • 评测
  • 测评结果:WA
  • 用时:40ms
  • 内存:3584kb
  • [2025-01-25 13:09:18]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
int n, vis[1 << 15];
string s;
bool check()
{
    for (int i = 0; i < 1 << n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i >> j & 1)
                continue;
            int nxt = 1 << j | i;
            if (s[i] > s[nxt])
                return 0;
        }
    }
    return 1;
}
string merge(const vector<string> &expr, char split)
{
    if (expr.empty())
    {
        if (split == '&')
        {
            return "T";
        }
        else
        {
            return "F";
        }
    }
    string ret;
    for (int i = 1; i < expr.size(); i++)
    {
        ret += '(';
    }
    ret += expr[0];
    for (int i = 1; i < expr.size(); i++)
    {
        ret += split;
        ret += expr[i];
        ret += ')';
    }
    return ret;
}
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        cin >> n >> s;
        for (int i = 0; i < 1 << n; i++)
        {
            vis[i] = 0;
        }
        if (!check())
        {
            cout << "No" << endl;
            continue;
        }
        cout << "Yes" << endl;
        for (int k = 0; k <= n; k++)
            for (int i = 0; i < 1 << n; i++)
            {
                if (__builtin_popcount(i) != k)
                    continue;
                if (s[i] == '1')
                {
                    vis[i] = 1;
                    if (i)
                        for (int j = (i - 1) & i;; j = (j - 1) & i)
                        {
                            if (vis[j])
                            {
                                vis[i] = 0;
                            }
                            if (!j)
                                break;
                        }
                }
            }
        vector<string> v;
        for (int i = 0; i < 1 << n; i++)
        {
            if (vis[i])
            {
                vector<string> tmp;
                for (int j = 0; j < n; j++)
                {
                    if (i >> j & 1)
                    {
                        string cur;
                        cur += j + 97;
                        tmp.push_back(cur);
                    }
                }
                v.push_back(merge(tmp, '&'));
            }
        }
        cout << merge(v, '|') << endl;
    }
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3584kb

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:

ok 7 lines, tightest: 5 out of 14 (7 test cases)

Test #2:

score: 0
Accepted
time: 1ms
memory: 3584kb

input:

4
1
00
1
10
1
01
1
11

output:

Yes
F
No
Yes
a
Yes
T

result:

ok 4 lines, tightest: 0 out of 11 (4 test cases)

Test #3:

score: 0
Accepted
time: 0ms
memory: 3584kb

input:

16
2
0000
2
1000
2
0100
2
1100
2
0010
2
1010
2
0110
2
1110
2
0001
2
1001
2
0101
2
1101
2
0011
2
1011
2
0111
2
1111

output:

Yes
F
No
No
No
No
No
No
No
Yes
(a&b)
No
Yes
a
No
Yes
b
No
Yes
(a|b)
Yes
T

result:

ok 16 lines, tightest: 1 out of 12 (16 test cases)

Test #4:

score: 0
Accepted
time: 0ms
memory: 3584kb

input:

256
3
00000000
3
10000000
3
01000000
3
11000000
3
00100000
3
10100000
3
01100000
3
11100000
3
00010000
3
10010000
3
01010000
3
11010000
3
00110000
3
10110000
3
01110000
3
11110000
3
00001000
3
10001000
3
01001000
3
11001000
3
00101000
3
10101000
3
01101000
3
11101000
3
00011000
3
10011000
3
01011000...

output:

Yes
F
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
...

result:

ok 256 lines, tightest: 5 out of 14 (256 test cases)

Test #5:

score: 0
Accepted
time: 40ms
memory: 3584kb

input:

65536
4
0000000000000000
4
1000000000000000
4
0100000000000000
4
1100000000000000
4
0010000000000000
4
1010000000000000
4
0110000000000000
4
1110000000000000
4
0001000000000000
4
1001000000000000
4
0101000000000000
4
1101000000000000
4
0011000000000000
4
1011000000000000
4
0111000000000000
4
1111000...

output:

Yes
F
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
...

result:

ok 65536 lines, tightest: 11 out of 18 (65536 test cases)

Test #6:

score: 0
Accepted
time: 1ms
memory: 3584kb

input:

168
4
0000000000000000
4
0000000000000001
4
0000000000000011
4
0000000000000101
4
0000000000000111
4
0000000000001111
4
0000000000010001
4
0000000000010011
4
0000000000010101
4
0000000000010111
4
0000000000011111
4
0000000000110011
4
0000000000110111
4
0000000000111111
4
0000000001010101
4
000000000...

output:

Yes
F
Yes
(((a&b)&c)&d)
Yes
((b&c)&d)
Yes
((a&c)&d)
Yes
(((a&c)&d)|((b&c)&d))
Yes
(c&d)
Yes
((a&b)&d)
Yes
(((a&b)&d)|((b&c)&d))
Yes
(((a&b)&d)|((a&c)&d))
Yes
((((a&b)&d)|((a&c)&d))|((b&c)&d))
Yes
(((a&b)&d)|(c&d))
Yes
(b&d)
Yes
((b&d)|((a&c)&d))
Yes
((b&d)|(c&d))
Yes
(a&d)
Yes
((a&d)|((b&c)&d))
Yes
...

result:

ok 168 lines, tightest: 11 out of 18 (168 test cases)

Test #7:

score: -100
Wrong Answer
time: 18ms
memory: 3584kb

input:

7581
5
00000000000000000000000000000000
5
00000000000000000000000000000001
5
00000000000000000000000000000011
5
00000000000000000000000000000101
5
00000000000000000000000000000111
5
00000000000000000000000000001111
5
00000000000000000000000000010001
5
00000000000000000000000000010011
5
0000000000000...

output:

Yes
F
Yes
((((a&b)&c)&d)&e)
Yes
(((b&c)&d)&e)
Yes
(((a&c)&d)&e)
Yes
((((a&c)&d)&e)|(((b&c)&d)&e))
Yes
((c&d)&e)
Yes
(((a&b)&d)&e)
Yes
((((a&b)&d)&e)|(((b&c)&d)&e))
Yes
((((a&b)&d)&e)|(((a&c)&d)&e))
Yes
(((((a&b)&d)&e)|(((a&c)&d)&e))|(((b&c)&d)&e))
Yes
((((a&b)&d)&e)|((c&d)&e))
Yes
((b&d)&e)
Yes
(((b...

result:

wrong answer 29 operations, you can't use more than 26 operations (test case 3081)