QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#429058#7281. How to Avoid Disqualification in 75 Easy StepsCrafticat0 7ms4856kbC++143.2kb2024-06-02 00:24:022024-06-02 00:24:04

Judging History

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

  • [2024-06-02 00:24:04]
  • 评测
  • 测评结果:0
  • 用时:7ms
  • 内存:4856kb
  • [2024-06-02 00:24:02]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

std::vector<int> wait();
void send(std::vector<int>);
using pii = pair<int,int>;

vector<int> toVec(set<int> &s) {
    vector<int> t(s.begin(),s.end());
    return t;
}

int gen(int a, int b) {
    return a + rand() % (b - a + 1);
    std::random_device r;

    std::default_random_engine e1(r());
    std::uniform_int_distribution<int> uniform_dist(a, b);
    int x = uniform_dist(e1);
    return x;
}

//768 876
std::pair<int, int> scout(int R, int H) {
    int Z = 500;

    int T = 25;

    set<int> pos;
    for (int i = 1; i <= 1000; ++i) {
        pos.insert(i);
    }

    vector<vector<int>> q(T), qR(T);
    vector<set<int>> qSet(T), qRSet(T);
    int mul = 1000;
    for (int i = 0; i < T; ++i) {
        set<int> s;
        set<int> notApp;
        int mine = mul;
        mul /= 2;
        if (mul > 10000) {
            int org = mine;
            bool t = true;
            for (int j = 1; j <= 1000; ++j) {
                if (t) s.insert(j);
                else
                    notApp.insert(j);
                if (--mine <= 0) {
                    mine = org;
                    t = !t;
                }
            }
        } else {
            notApp = pos;
            while (s.size() < Z) {
                int v = gen(1,1000);
                s.insert(v);
                notApp.erase(v);
            }
        }
        q[i] = toVec(s);
        qSet[i] = s;
        qR[i] = toVec(notApp);
        qRSet[i] = notApp;
        send(q[i]);
        send(qR[i]);
    }
    auto r = wait();

    for (int i = 0; i < T * 2; ++i) {
        if (r[i] == false) {
            if (i % 2 == 0) {
                for (auto x : q[i / 2]) {
                    pos.erase(x);
                }
            } else if (i % 2 == 1) {
                for (auto x : qR[i / 2]) {
                    pos.erase(x);
                }
            }
        }
    }
    auto res3 = toVec(pos);
    vector<int> res2(res3.size()), res1(res3.size());
    vector<pii> copy(res3.size()), copy2(res3.size());
    for (int i = 0; i < res3.size(); ++i) {
        copy[i] = {gen(1,10000),res3[i]};
        copy2[i] = {gen(1,10000),res3[i]};
    }
    std::sort(copy.begin(), copy.end());
    std::sort(copy2.begin(), copy2.end());
    for (int i = 0; i < res3.size(); ++i) {
        res2[i] = copy[i].second;
        res1[i] = copy2[i].second;
    }


    if (res3.size() == 2) return {res3[0],res3[1]};
    if (res3.size() > 2) {
        set<pii> newPos;
        for (auto x : res2) {
            for (auto y : res1) {
                bool can = true;
                for (int i = 0; i < T; ++i) {
                    int sum = r[i * 2] + r[i * 2 + 1];
                    if (sum == 2) {
                        if (qSet[i].count(x) && qSet[i].count(y)) can = false;
                        if (qRSet[i].count(x) && qRSet[i].count(y)) can = false;
                    }
                }
                if (!can) continue;
                newPos.insert({min(x, y), max(x, y)});
            }
        }

        return *newPos.begin();
    }
    if (res3.size() == 1) return {res3[0],res3[0]};
    exit(5);
}



详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 3952kb

input:



output:


result:

wrong answer Not correct

Subtask #2:

score: 0
Wrong Answer

Test #11:

score: 0
Wrong Answer
time: 3ms
memory: 4248kb

input:

\x14

output:


result:

wrong answer Not correct

Subtask #3:

score: 0
Wrong Answer

Test #66:

score: 0
Wrong Answer
time: 4ms
memory: 4556kb

input:

\x1e

output:


result:

wrong answer Not correct

Subtask #4:

score: 0
Wrong Answer

Test #120:

score: 0
Wrong Answer
time: 7ms
memory: 4856kb

input:

K

output:


result:

wrong answer Not correct