QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#510028#9156. 百万富翁Franuch#15 629ms23448kbC++171.5kb2024-08-08 20:39:062024-08-08 20:39:06

Judging History

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

  • [2024-08-08 20:39:06]
  • 评测
  • 测评结果:15
  • 用时:629ms
  • 内存:23448kb
  • [2024-08-08 20:39:06]
  • 提交

answer

#include "richest.h"
#include <bits/stdc++.h>

using namespace std;
typedef int ll;

ll on2(ll n) {
    vector<ll> a, b;
    for (ll i = 1; i < n; i++) {
        for (ll j = 0; j < i; j++) {
            a.push_back(i);
            b.push_back(j);
        }
    }

    vector<ll> c = ask(a, b);
    std::reverse(c.begin(), c.end());

    vector<vector<bool>> cmp(n, vector<bool>(n, true));
    for (ll i = 1; i < n; i++)
        for (ll j = 0; j < i; j++) {
            cmp[i][j] = c.back() == i;
            cmp[j][i] = c.back() == j;
            c.pop_back();
        }

    for (ll i = 0; i < n; i++) {
        bool good = true;
        for (ll j = 0; j < n; j++)
            good = good and cmp[i][j];

        if (good)
            return i;
    }
    return 0;
}

vector<ll> p, q;

ll onlogn(ll n) {
    mt19937 rng(3498);

    p.resize(n);
    std::iota(p.begin(), p.end(), 0);

    while (n > 1) {
        std::shuffle(p.begin(), p.end(), rng);

        q.resize(n);
        for (ll i = 0; i < n; i++)
            q[i] = p[(i + 1) % n];

        q = ask(p, q);

        p.clear();
        for (ll i = 0; i < n; i++) {
            if (q[i] == q[(i + 1) % n]) {
                p.push_back(q[i]);
                i++;
            }
        }
        n = p.size();
    }

    return p[0];
}

ll richest(ll N, ll T, ll S) {
    const ll MAX_N = 1e6;
    p.reserve(MAX_N);
    q.reserve(MAX_N);

    if (T == 1) {
        return on2(N);
    } else {
        return onlogn(N);
    }
}

Details

Tip: Click on the bar to expand more detailed information

Pretests

Pretest #1:

score: 15
Accepted
time: 612ms
memory: 23448kb

input:

1000 1 499500 957319859

output:

Correct
7127326332295218295
1.000000
1331569654267968081

result:

points 1.0 Correct

Pretest #2:

score: 0
Time Limit Exceeded

input:

1000000 20 2000000 29091473

output:

Unauthorized output

result:



Final Tests

Test #1:

score: 15
Accepted
time: 629ms
memory: 23404kb

input:

1000 1 499500 957319857

output:

Correct
7127326332295218295
1.000000
1331569654267968081

result:

points 1.0 Correct

Test #2:

score: 0
Time Limit Exceeded

input:

1000000 20 2000000 29091471

output:

Unauthorized output

result: