제출 #251034

#제출 시각아이디문제언어결과실행 시간메모리
251034IsaacMorisMinerals (JOI19_minerals)C++14
40 / 100
120 ms7796 KiB
#include<iostream>
#include <bits/stdc++.h>
#include "minerals.h"
#define ll long long
#define ld long double
#define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
int low[100009], high[100009], vis[100009];
vector<int> v[100009];

void Solve(int N)
{
    vector<int> v1, v2;
    int last=0;
    for (int i = 1; i <= 2 * N; ++i)
    {
        vis[i]=vis[0]=0;
        int x=Query(i);
        if(x!=last)
            v1.push_back(i);
        else
            v2.push_back(i);
        last=x;
    }
    for(int i=0; i<100; i++)
        random_shuffle(v1.begin(),v1.end());
    for(int i=0; i<N; i++)
        high[i]=N-1, low[i]=0;
    int good=1;
    bool p=1;
    while(good)
    {
        good=0;
        for(int i=0; i<N; i++)
            if(low[i]<=high[i])
                v[low[i]+ (high[i]-low[i])/2].push_back(i);
            else
                vis[high[i]+1]=1;
        for(int i=0; i<N; i++)
        {
            if(vis[i])
                continue;
            int x=Query(v1[i]);
            while(!v[i].empty())
            {
                int id=v[i].back();

                good=1;
                v[i].pop_back();
                int q=Query(v2[id]);
                if((q!=x && p) || (q==x && !p))
                    high[id]=i-1;
                else
                    low[id]=i+1;
                x=q;
            }
        }
        p=!p;
    }
    for(int i=0; i<N; i++)
        Answer(v2[i], v1[high[i]+1]);

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...