QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#165987#6818. Barrel Theoryucup-team004AC ✓9ms3720kbC++204.7kb2023-09-05 23:54:402023-09-05 23:54:42

Judging History

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

  • [2023-09-05 23:54:42]
  • 评测
  • 测评结果:AC
  • 用时:9ms
  • 内存:3720kb
  • [2023-09-05 23:54:40]
  • 提交

answer

#include <bits/stdc++.h>

using i64 = long long;

bool dfs(int n, int m, int x = 0, int mn = 100) {
    if (!n) {
        return !m && x < mn;
    }
    for (int i = 1; i <= std::min(m, mn); i++) {
        if (dfs(n - 1, m - i, x ^ i, std::min(mn, i))) {
            return true;
        }
    }
    return false;
}

void solve() {
    int n, m;
    std::cin >> n >> m;
    
    if (n == 1) {
        std::cout << "NO\n";
        return;
    }
    
    if (n == 2) {
        if (!((m + 1) & m)) {
            std::cout << "NO\n";
        } else {
            std::cout << "YES\n";
            std::cout << m / 2 << " "  << (m + 1) / 2 << "\n";
        }
        return;
    }
    
    if (m % 2 == 0) {
        if (n % 2 == 0) {
            std::cout << "YES\n";
            for (int i = 0; i < n - 2; i++) {
                std::cout << 1 << " ";
            }
            m -= n - 2;
            std::cout << m / 2 << " " << m / 2 << "\n";
        } else {
            if (m == n + 1) {
                std::cout << "NO\n";
                return;
            }
            if (n == 3 && m == 8) {
                std::cout << "NO\n";
                return;
            }
            std::cout << "YES\n";
            if (n >= 5) {
                for (int i = 0; i < n - 5; i++) {
                    std::cout << 1 << " ";
                }
                m -= n - 5;
                std::cout << 1 << " " << 2 << " " << 3 << " ";
                m -= 6;
                std::cout << m / 2 << " " << m / 2 << "\n";
            } else {
                if (m & (m - 1)) {
                    m /= 2;
                    std::cout << (m & (m - 1)) << " " << (m & -m) << " " << m << "\n";
                } else {
                    m /= 16;
                    std::cout << 3 * m << " " << 6 * m << " " << 7 * m << "\n";
                }
                return;
            }
        }
    } else {
        if (m < 2 * n) {
            std::cout << "NO\n";
            return;
        }
        if (n % 2 == 0) {
            std::cout << "YES\n";
            for (int i = 0; i < n - 4; i++) {
                std::cout << 2 << " ";
            }
            m -= 2 * (n - 4);
            int x = m / 4;
            if (m % 8 < 4) {
                if (m % 4 == 1) {
                    std::cout << x + 1 << " " << x << " " << x << " " << x << "\n";
                } else {
                    std::cout << x + 1 << " " << x + 1 << " " << x + 1 << " " << x << "\n";
                }
            } else {
                if (m % 4 == 1) {
                    std::cout << 2 << " " << 3 << " " << 2 * x - 2 << " " << 2 * x - 2 << "\n";
                } else {
                    std::cout << 3 << " " << 3 << " " << 2 * x - 1 << " " << 2 * x - 2 << "\n";
                }
            }
        } else {
            if (m < 2 * n + 7) {
                std::cout << "NO\n";
                return;
            }
            if (n >= 5) {
                std::cout << "YES\n";
                for (int i = 0; i < n - 5; i++) {
                    std::cout << 2 << " ";
                }
                m -= 2 * (n - 5);
                std::cout << 2 << " " << 4 << " " << 7 << " ";
                m -= 13;
                std::cout << m / 2 << " " << m / 2 << "\n";
            } else if (m % 4 == 1) {
                m /= 4;
                if (m & (m - 1)) {
                    std::cout << "YES\n";
                    std::cout << (m & (m - 1)) * 2 << " " << (m & -m) * 2 << " " << m * 2 + 1<< "\n";
                } else {
                    if (m < 8) {
                        std::cout << "NO\n";
                        return;
                    }
                    std::cout << "YES\n";
                    m /= 8;
                    std::cout << 6 * m + 1 << " " << 12 * m << " " << 14 * m << "\n";
                }
            } else {
                m /= 4;
                if (m & (m - 1)) {
                    std::cout << "YES\n";
                    std::cout << (m & (m - 1)) * 2 + 1 << " " << (m & -m) * 2 + 1 << " " << m * 2 + 1<< "\n";
                } else {
                    if (m < 8) {
                        std::cout << "NO\n";
                        return;
                    }
                    std::cout << "YES\n";
                    m /= 8;
                    std::cout << 6 * m + 1 << " " << 12 * m + 1 << " " << 14 * m + 1 << "\n";
                }
            }
        }
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int t;
    std::cin >> t;
    
    while (t--) {
        solve();
    }
    
    return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

3
6 7
5 17
4 4

output:

NO
YES
2 4 7 2 2
YES
1 1 1 1

result:

ok T=3 (3 test cases)

Test #2:

score: 0
Accepted
time: 3ms
memory: 3656kb

input:

4194
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
1 51
1 52
1 53
1 54
1 55
1 56
1 57
1 58
1 59
1 60
1 61...

output:

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
NO
NO
...

result:

ok T=4194 (4194 test cases)

Test #3:

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

input:

1
2 10000000

output:

YES
5000000 5000000

result:

ok T=1 (1 test case)

Test #4:

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

input:

1
3 9999999

output:

YES
4999997 3 4999999

result:

ok T=1 (1 test case)

Test #5:

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

input:

1
5 9999999

output:

YES
2 4 7 4999993 4999993

result:

ok T=1 (1 test case)

Test #6:

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

input:

1
6 9999999

output:

YES
2 2 2499999 2499999 2499999 2499998

result:

ok T=1 (1 test case)

Test #7:

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

input:

1
6 10000000

output:

YES
1 1 1 1 4999998 4999998

result:

ok T=1 (1 test case)

Test #8:

score: 0
Accepted
time: 3ms
memory: 3644kb

input:

20
42 500000
18468 500000
6335 500000
6501 500000
19170 500000
15725 500000
11479 500000
9359 500000
6963 500000
4465 500000
5706 500000
8146 500000
3282 500000
16828 500000
9962 500000
492 500000
2996 500000
11943 500000
4828 500000
5437 500000

output:

YES
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 249980 249980
YES
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

result:

ok T=20 (20 test cases)

Test #9:

score: 0
Accepted
time: 9ms
memory: 3720kb

input:

20
46 500000
9217 500000
4199 500000
17796 500000
9485 500000
19651 500000
14591 500000
6432 500000
10706 500000
18317 500000
5558 500000
8190 500000
12653 500000
607 500000
12154 500000
17830 500000
9814 500000
10368 500000
6659 500000
8962 500000

output:

YES
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 249978 249978
YES
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

result:

ok T=20 (20 test cases)

Test #10:

score: 0
Accepted
time: 3ms
memory: 3652kb

input:

5104
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 10
2 11
2 12
2 13
2 14
2 15
2 16
2 17
2 18
2 19
2 20
2 21
2 22
2 23
2 24
2 25
2 26
2 27
2 28
2 29
2 30
2 31
2 32
2 33
2 34
2 35
2 36
2 37
2 38
2 39
2 40
2 41
2 42
2 43
2 44
2 45
2 46
2 47
2 48
2 49
2 50
2 51
2 52
2 53
2 54
2 55
2 56
2 57
2 58
2 59
2 60
2 61
2 6...

output:

YES
1 1
NO
YES
2 2
YES
2 3
YES
3 3
NO
YES
4 4
YES
4 5
YES
5 5
YES
5 6
YES
6 6
YES
6 7
YES
7 7
NO
YES
8 8
YES
8 9
YES
9 9
YES
9 10
YES
10 10
YES
10 11
YES
11 11
YES
11 12
YES
12 12
YES
12 13
YES
13 13
YES
13 14
YES
14 14
YES
14 15
YES
15 15
NO
YES
16 16
YES
16 17
YES
17 17
YES
17 18
YES
18 18
YES
18 ...

result:

ok T=5104 (5104 test cases)

Test #11:

score: 0
Accepted
time: 9ms
memory: 3656kb

input:

33333
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
3 300
...

output:

YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
148 2 150
YES
14...

result:

ok T=33333 (33333 test cases)