Submission #1330921

#TimeUsernameProblemLanguageResultExecution timeMemory
1330921nguyenkhangninh99Minerals (JOI19_minerals)C++20
40 / 100
21 ms3452 KiB

#include "minerals.h"
#include<bits/stdc++.h>
using namespace std;

namespace sub1{
    void solve(int n){
        vector<bool> vis(n + 1);
        for(int i = 1; i <= n; i++){
            if(!vis[i]){
                Query(i); 
                int j = i + 1;
                while(j <= n){
                    if(Query(j) == 1){
                        Answer(i, j);
                        vis[i] = vis[j] = true;
                        Query(j); 
                        break; 
                    }else Query(j++); 
                }
                Query(i); 
            }
        }
    }
}
namespace subsub{
    void solve(int n){
        vector<int> l(n / 2), r(n / 2), ans(n / 2), a, b;
        int cnt = 0;
        for(int i = 1; i <= n; i++){
            int x = Query(i);
            if(x == a.size() + 1) a.push_back(i);
            else{
                r[b.size()] = a.size() - 1;
                b.push_back(i);
                Query(i);
            }
        }
        for(int i = 0; i < n / 2; i++) Query(a[i]);
        while(true){
            bool ok = false;
            vector<vector<int>> query(n / 2);
            for(int i = 0; i < n / 2; i++){
                if(l[i] <= r[i]){
                    query[(l[i] + r[i]) / 2].push_back(i);
                    ok = true;
                }
            }
            if(!ok) break;

            for(int i = 0; i < n / 2; i++){
                Query(a[i]); //thêm a[i]
                for(int j: query[i]){
                    if(Query(b[j]) == i + 1) ans[j] = i, r[j] = i - 1; //nếu thêm b[j] ok
                    else l[j] = i + 1;
                    Query(b[j]); //xóa b[j]
                }
            }
            for(int i = 0; i < n / 2; i++) Query(a[i]); //xóa a[i];
        }
        for(int i = 0; i < n / 2; i++) Answer(b[i], a[ans[i]]);
    }
}
void Solve(int m){
    if(m <= 100) sub1::solve(2 * m);
    else subsub::solve(2 * m);
}
#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...