제출 #262109

#제출 시각아이디문제언어결과실행 시간메모리
262109dooweyMeetings (JOI19_meetings)C++14
29 / 100
3083 ms512 KiB
#include "meetings.h"
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

#define fi first
#define se second
#define mp make_pair
#define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

int n;

const int MAXN = 2020;
int par[MAXN];

vector<int> mergesort(vector<int> a){
    if(a.size() == 1)
        return a;
    int mid = (int)a.size()/2;
    vector<int> lef, rig;
    for(int i = 0 ; i < a.size(); i ++ ){
        if(i < mid)
            lef.push_back(a[i]);
        else
            rig.push_back(a[i]);
    }
    lef = mergesort(lef);
    rig = mergesort(rig);
    vector<int> srt;
    int p = 0;
    for(int i = 0 ; i < lef.size(); i ++ ){
        while(p < rig.size() && Query(0, lef[i], rig[p]) == rig[p]){
            srt.push_back(rig[p]);
            p ++ ;
        }
        srt.push_back(lef[i]);
    }
    while(p < rig.size()){
        srt.push_back(rig[p]);
        p ++ ;
    }
    return srt;
}

bool use[MAXN];
bool ban[MAXN];

void Solve(int N) {
    n = N;
    vector<int> ord;
    for(int i = 1; i < n ; i ++ ){
        ord.push_back(i);
        par[i] = -1;
    }
    random_shuffle(ord.begin(), ord.end());
    int fir;
    for(auto nd : ord){
        if(par[nd] != -1) continue;
        int res;
        for(int j = 0 ; j < n; j ++ ){
            use[j]=false;
            ban[j]=false;
        }
        for(int j = 1; j < n; j ++ ){
            if(j == nd) continue;
            res = Query(0, j, nd);
            use[res]=true;
        }
        use[nd]=true;
        use[0]=true;
        fir = 0;
        for(int j = 1; j < n; j ++ ){
            if(!use[j]) continue;
            if(par[j] != -1){
                if(use[par[j]]){
                    ban[par[j]]=true;
                }
            }
        }
        vector<int> ss;
        for(int j = 1; j < n; j ++ ){
            if(use[j] && par[j] != -1 && ban[j] == false){
                fir = j;
            }
            else if(use[j] && !ban[j]){
                ss.push_back(j);
            }
        }
        ss = mergesort(ss);
        par[ss[0]] = fir;
        for(int i = 1; i < ss.size(); i ++ )
            par[ss[i]] = ss[i - 1];
    }
    int l, r;
    for(int i = 1; i < n; i ++ ){
        l = par[i];
        r = i;
        if(l > r)
            swap(l, r);
        Bridge(l, r);
    }
}

컴파일 시 표준 에러 (stderr) 메시지

meetings.cpp: In function 'std::vector<int> mergesort(std::vector<int>)':
meetings.cpp:23:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0 ; i < a.size(); i ++ ){
                     ~~^~~~~~~~~~
meetings.cpp:33:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0 ; i < lef.size(); i ++ ){
                     ~~^~~~~~~~~~~~
meetings.cpp:34:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         while(p < rig.size() && Query(0, lef[i], rig[p]) == rig[p]){
               ~~^~~~~~~~~~~~
meetings.cpp:40:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(p < rig.size()){
           ~~^~~~~~~~~~~~
meetings.cpp: In function 'void Solve(int)':
meetings.cpp:93:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 1; i < ss.size(); i ++ )
                        ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...