답안 #417439

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
417439 2021-06-03T17:44:46 Z iulia2100 Minerals (JOI19_minerals) C++14
6 / 100
1000 ms 852 KB
#include <iostream>
#include "minerals.h"

using namespace std;

//ifstream cin ("idk.in");
//ofstream cout ("idk.out");

const int N = 43005;

struct idk {
    int st, dr;
} interval[N + N];

int n, last_ans;
int index[N];
bool in_set[N + N];

void bs(int st, int dr, int other_half_st, int other_half_dr) {
    int x = last_ans;
    if (other_half_st > dr) { //sunt in partea stanga. Daca sunt in dreapta cunosc deja intervalele
        for (int i = 1; i < st; ++i)    {
            if (in_set[i])  {
                x = Query(index[i]);
                in_set[i] = false;
                last_ans = x;
            }
        }
        for (int i = st; i <= dr; ++i)  {
            if (!in_set[i]) {
                x = Query(index[i]);
                in_set[i] = true;
                last_ans = x;
            }
        }
        for (int i = dr + 1; i <= n + n; ++i)   {
            if (in_set[i])  {
                x = Query(index[i]);
                in_set[i] = false;
                last_ans = x;
            }
        }
        for (int i = n + 1; i <= n + n; ++i)    {
            if (interval[i].dr < st || interval[i].st > dr)
                continue;
            int aux = Query(index[i]);
            last_ans = aux;
            if (aux == x)   {
                interval[i].st = st, interval[i].dr = dr;
                last_ans = Query(index[i]);
            } else  {
                last_ans = Query(index[i]);
                interval[i].st = other_half_st;
                interval[i].dr = other_half_dr;
            }
        }
    }
    if (st == dr)   {
        return;
    }
    bs(st, (st + dr) / 2, (st + dr) / 2 + 1, dr);
    bs((st + dr) / 2 + 1, dr, st, (st + dr) / 2);
}

void find_index()   {
    int last = 0, nd = n, st = 0;
    for (int i = 1; i <= n + n; ++i)    {
        int x = Query(i);
        last_ans = x;
        if (x == last)  {
            last_ans = Query(i);
            continue;
        }
        in_set[i] = true;
        last = x;
    }
    for (int i = 1; i <= n + n; ++i)    {
        if (!in_set[i])
            index[++nd] = i;
        else index[++st] = i;
    }
    for (int i = 1; i <= n; ++i)    {
        in_set[i] = true;
        in_set[i + n] = false;
    }
//    cout << '\n';
//    for (int i = 1; i <= n + n; ++i)
//        cout << index[i] << ' ';
}

void Solve(int aux_n)   {
    n = aux_n;
    find_index();
    for (int i = 1; i <= n; ++i)
        interval[i + n] = {1, n};
    bs(1, n / 2, n / 2 + 1, n);
    bs(n / 2 + 1, n, 1, n / 2);
    for (int i = 1; i <= n; ++i)    {
        Answer(index[interval[i + n].st], index[i + n]);
    }
}

# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 328 KB Output is correct
2 Correct 24 ms 384 KB Output is correct
3 Correct 86 ms 456 KB Output is correct
4 Correct 284 ms 588 KB Output is correct
5 Execution timed out 1099 ms 852 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 6 ms 328 KB Output is correct
6 Correct 24 ms 384 KB Output is correct
7 Correct 86 ms 456 KB Output is correct
8 Correct 284 ms 588 KB Output is correct
9 Execution timed out 1099 ms 852 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 6 ms 328 KB Output is correct
6 Correct 24 ms 384 KB Output is correct
7 Correct 86 ms 456 KB Output is correct
8 Correct 284 ms 588 KB Output is correct
9 Execution timed out 1099 ms 852 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 6 ms 328 KB Output is correct
6 Correct 24 ms 384 KB Output is correct
7 Correct 86 ms 456 KB Output is correct
8 Correct 284 ms 588 KB Output is correct
9 Execution timed out 1099 ms 852 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 6 ms 328 KB Output is correct
6 Correct 24 ms 384 KB Output is correct
7 Correct 86 ms 456 KB Output is correct
8 Correct 284 ms 588 KB Output is correct
9 Execution timed out 1099 ms 852 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 6 ms 328 KB Output is correct
6 Correct 24 ms 384 KB Output is correct
7 Correct 86 ms 456 KB Output is correct
8 Correct 284 ms 588 KB Output is correct
9 Execution timed out 1099 ms 852 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 6 ms 328 KB Output is correct
6 Correct 24 ms 384 KB Output is correct
7 Correct 86 ms 456 KB Output is correct
8 Correct 284 ms 588 KB Output is correct
9 Execution timed out 1099 ms 852 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Correct 6 ms 328 KB Output is correct
6 Correct 24 ms 384 KB Output is correct
7 Correct 86 ms 456 KB Output is correct
8 Correct 284 ms 588 KB Output is correct
9 Execution timed out 1099 ms 852 KB Time limit exceeded