답안 #255674

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
255674 2020-08-01T14:04:11 Z kimbj0709 CEOI16_icc (CEOI16_icc) C++14
0 / 100
1 ms 384 KB
#include<bits/stdc++.h>
#include "icc.h"
using namespace std;
//#define int long long
vector<int> color(105);
vector<vector<int> > comp(105);
int q(vector<int> &a,vector<int> &b){
    if(a.size()==0||b.size()==0){
        return 0;
    }
    int aa[(int)a.size()];
    int bb[(int)b.size()];
    for(int i=0;i<(int)a.size();i++){
        aa[i] = a[i];
    }
    for(int i=0;i<(int)b.size();i++){
        bb[i] = b[i];
    }
    /*for(auto k:a){
        cout << k << " ";
    }
    cout << endl;
    for(auto k:b){
        cout << k << " ";
    }
    cout << endl;
    int input;
    cin >> input;
    return input;*/
    return query(a.size(),b.size(),aa,bb);

}
int qcomp(vector<int> &a,vector<int> &b){
    vector<int> temp1,temp2;
    for(auto k:a){
        for(auto j:comp[k]){
            temp1.push_back(j);
        }
    }
    for(auto k:b){
        for(auto j:comp[k]){
            temp2.push_back(j);
        }
    }
    return q(temp1,temp2);
}
void road(int a,int b){
    //cout << a << " " << b << "__" << endl;
    setRoad(min(a,b),max(a,b));
}
void merge(int a,int b){
    for(auto k:comp[color[b]]){
        comp[color[a]].push_back(k);
    }
    int change = color[b];
    for(int i=1;i<color.size();i++){
        if(color[i]==change){
            color[i] = color[a];
        }
    }
    comp[change].clear();
}
void binarysearch(vector<int> left,vector<int> right){
    vector<int> temp1;
    vector<int> temp2;
    for(auto k:left){
        for(auto j:comp[k]){
            temp1.push_back(j);
        }
    }
    for(auto k:right){
        for(auto j:comp[k]){
            temp2.push_back(j);
        }
    }
    left = temp1;
    right = temp2;
    while(left.size()!=1){
        vector<int> curr;
        for(int i=0;i<(left.size()+1)/2;i++){
            curr.push_back(left[i]);
        }
        vector<int> curr2;
        for(int i=(left.size()+1)/2;i<left.size();i++){
            curr2.push_back(left[i]);
        }
        if(q(curr,right)==1){
            left = curr;
        }
        else{
            left = curr2;
        }
    }
    swap(left,right);
    while(left.size()!=1){
        vector<int> curr;
        for(int i=0;i<(left.size()+1)/2;i++){
            curr.push_back(left[i]);
        }
        vector<int> curr2;
        for(int i=(left.size()+1)/2;i<left.size();i++){
            curr2.push_back(left[i]);
        }
        if(q(curr,right)==1){
            left = curr;
        }
        else{
            left = curr2;
        }
    }
    assert(left.size()==1&&right.size()==1);
    road(left[0],right[0]);
    merge(left[0],right[0]);
}
int rec(vector<int> a){
    vector<int> left,right;
    for(int i=0;i<(a.size()+1)/2;i++){
        left.push_back(a[i]);
    }
    for(int i=(a.size()+1)/2;i<a.size();i++){
        right.push_back(a[i]);
    }
    if(left.size()==0||right.size()==0){
        return 0;
    }
    if(qcomp(left,right)==0){
        if(rec(left)==1){
            return 1;
        }
        else{
          if(rec(right)==1){
              return 1;
          }
        }
    }
    else{
        binarysearch(left,right);
        return 1;
    }
    return 0;
}
void run(int n){
    for(int i=0;i<color.size();i++){
        comp[i].clear();
        comp[i].push_back(i);
        color[i] = i;
    }
    vector<int> current;
    vector<int> alr;
    for(int i=1;i<=n-1;i++){
        //cout << "YES" << endl;
        for(int j=1;j<=n;j++){
            if(comp[j].size()!=0){
                current.push_back(j);
            }
        }
        while(1){
            random_shuffle(current.begin(),current.end());
            vector<int> temp1;
            vector<int> temp2;
            for(int j=0;j<(current.size()+1)/2;j++){
                temp1.push_back(current[j]);
            }
            for(int j=(current.size()+1)/2;j<current.size();j++){
                temp2.push_back(j);
            }
            if(qcomp(temp1,temp2)==1){
                binarysearch(temp1,temp2);
                break;
            }
        }
        current.clear();
    }
}

Compilation message

icc.cpp: In function 'void merge(int, int)':
icc.cpp:56:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=1;i<color.size();i++){
                 ~^~~~~~~~~~~~~
icc.cpp: In function 'void binarysearch(std::vector<int>, std::vector<int>)':
icc.cpp:80:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<(left.size()+1)/2;i++){
                     ~^~~~~~~~~~~~~~~~~~
icc.cpp:84:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=(left.size()+1)/2;i<left.size();i++){
                                     ~^~~~~~~~~~~~
icc.cpp:97:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<(left.size()+1)/2;i++){
                     ~^~~~~~~~~~~~~~~~~~
icc.cpp:101:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=(left.size()+1)/2;i<left.size();i++){
                                     ~^~~~~~~~~~~~
icc.cpp: In function 'int rec(std::vector<int>)':
icc.cpp:117:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<(a.size()+1)/2;i++){
                 ~^~~~~~~~~~~~~~~
icc.cpp:120:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=(a.size()+1)/2;i<a.size();i++){
                              ~^~~~~~~~~
icc.cpp: In function 'void run(int)':
icc.cpp:143:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<color.size();i++){
                 ~^~~~~~~~~~~~~
icc.cpp:161:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j=0;j<(current.size()+1)/2;j++){
                         ~^~~~~~~~~~~~~~~~~~~~~
icc.cpp:164:45: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j=(current.size()+1)/2;j<current.size();j++){
                                            ~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB The query sets must be disjoint
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB The query sets must be disjoint
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB The query sets must be disjoint
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB The query sets must be disjoint
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 256 KB The query sets must be disjoint
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB The query sets must be disjoint
2 Halted 0 ms 0 KB -