QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#565842#9308. World CupbigJWA 1ms3876kbC++202.0kb2024-09-15 22:22:472024-09-15 22:22:48

Judging History

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

  • [2024-09-15 22:22:48]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3876kb
  • [2024-09-15 22:22:47]
  • 提交

answer

#include <bits/stdc++.h>

namespace stdv = std::views;
namespace stdr = std::ranges;

using i64 = long long;

template<typename A, typename B>
constexpr bool chmax(A& a, const B& b) {
    a = (a > b) ? a : b;
    return a == b;
}
template<typename A, typename B>
constexpr bool chmin(A& a, const B& b) {
    a = (a < b) ? a : b;
    return a == b;
}

constexpr int N = 32;
int a[N];
int A[N];

void Find() {
    for (int i = 0; i < N; i++) {
        std::cin >> a[i];
    }
    int x = a[0];
    for (int i = 0; i < N; i += 4) {
        std::sort(a + i, a + i + 4, std::greater());
    }

    if (a[0] != x && a[1] != x) {
        std::cout << "32\n";
        return;
    }
    int ans = 16;

    auto work = [&](std::vector<int> b) {
        int res = 8;
        while (res > 1) {
            std::vector<int> nb;
            for (int i = 0; i < b.size(); i += 2) {
                nb.push_back(std::max(b[i], b[i + 1]));
            }
            b = std::move(nb);
            if (std::find(b.begin(), b.end(), x) == b.end()) {
                return res;
            }
            res /= 2;
        }
        return 1;
    };

    for (int mask = 0; mask < (1 << 8); mask++) {
        std::memcpy(A, a, sizeof a);
        std::vector<int> b;
        for (int i = 0; i < 8; i++) {
            if (mask >> i & 1) {
                std::swap(A[i * 4], A[i * 4 + 1]);
            }
        }
        for (int i = 0; i < N; i += 8) {
            b.push_back(std::max(A[i], A[i + 5]));
        }
        for (int i = 1; i < N; i += 8) {
            b.push_back(std::max(A[i], A[i + 3]));
        }
        if (std::find(b.begin(), b.end(), x) != b.end()) {
            chmin(ans, work(b));
        }
    }
    
    std::cout << ans << '\n';
}

int main(int argc, const char* argv[]) {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int t;
    std::cin >> t;
    
    while (t--) {
        Find();
    }
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

1
32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

output:

1

result:

ok 1 number(s): "1"

Test #2:

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

input:

32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
2 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
3 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
4 1 2 3 5 6 7 8 9 10 11 12 13 14 15 ...

output:

32
32
16
16
16
16
8
8
8
8
8
8
8
8
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
1

result:

wrong answer 14th numbers differ - expected: '4', found: '8'