답안 #864434

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
864434 2023-10-22T20:55:43 Z Ahmed57 CEOI16_icc (CEOI16_icc) C++17
61 / 100
118 ms 3232 KB
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#include "icc.h"

int p[100001];
vector<int> v[100001];
int find(int x){
    if(x==p[x])return x;
    return p[x] = find(p[x]);
}
void merge(int a,int b){
    a = find(a) , b = find(b);
    if(a==b)return ;
    if(v[a].size()<v[b].size())swap(a,b);
    p[b] = a;
    while(v[b].size()){
        v[a].push_back(v[b].back());v[b].pop_back();
    }
}
int quer(int a,int b,vector<int>A , vector<int> B){
    int AA[a];
    for(int i = 0;i<A.size();i++)AA[i] = A[i];
    int BB[b];
    for(int i = 0;i<B.size();i++)BB[i] = B[i];
    return query(a,b,AA,BB);
}
mt19937 rng;
void run(int n){
    rng.seed(time(0));
    for(int i = 1;i<=n;i++){
        p[i] = i;
        v[i].push_back(i);
    }
    for(int it = 0;it<n-1;it++){
        vector<int> a , b;
        for(int xd = 0;;xd++){
            ordered_set lol;
            vector<int> fi , se;
            for(int i = 1;i<=n;i++){
                if(i==find(i))lol.insert(i);
            }
            for(int i = 0;i<(n-it)/2;i++){
                int x = rng()%lol.size();
                auto it = lol.find_by_order(x);
                for(auto a3:v[(*it)])fi.push_back(a3);
                lol.erase(it);
            }
            for(auto i:lol){
                for(auto a3:v[i])se.push_back(a3);
            }
            if(quer(fi.size(),se.size(),fi,se)){
                a = fi , b = se;
                break;
            }
        }
        while(a.size()>1||b.size()>1){
            if(a.size()<b.size())swap(a,b);
            vector<int> A,B;
            for(int i = 0;i<a.size();i++){
                A.push_back(a[i]);
            }for(int i = 0;i<max(int(b.size()/2),1);i++){
                B.push_back(b[i]);
            }
            if(quer(A.size(),B.size(),A,B)){
                A.clear();
                for(int i = 0;i<max(int(a.size()/2),1);i++){
                    A.push_back(a[i]);
                }
                if(quer(A.size(),B.size(),A,B)){
                    a = A , b = B;
                    continue;
                }else{
                    A.clear();
                    for(int i = a.size()/2;i<a.size();i++){
                        A.push_back(a[i]);
                    }
                    a = A;b = B;
                    continue;
                }
                continue;
            }else{
                B.clear();
                for(int i = b.size()/2;i<b.size();i++){
                    B.push_back(b[i]);
                }
                A.clear();
                for(int i = 0;i<max(int(a.size()/2),1);i++){
                    A.push_back(a[i]);
                }
                if(quer(A.size(),B.size(),A,B)){
                    a = A , b = B;
                    continue;
                }else{
                    A.clear();
                    for(int i = a.size()/2;i<a.size();i++){
                        A.push_back(a[i]);
                    }
                    a = A;b = B;
                    continue;
                }
                continue;
            }
        }
        setRoad(a[0],b[0]);
        merge(a[0],b[0]);
    }
}
/*int main(){

}*/

Compilation message

icc.cpp: In function 'int quer(int, int, std::vector<int>, std::vector<int>)':
icc.cpp:27:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int i = 0;i<A.size();i++)AA[i] = A[i];
      |                   ~^~~~~~~~~
icc.cpp:29:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for(int i = 0;i<B.size();i++)BB[i] = B[i];
      |                   ~^~~~~~~~~
icc.cpp: In function 'void run(int)':
icc.cpp:64:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |             for(int i = 0;i<a.size();i++){
      |                           ~^~~~~~~~~
icc.cpp:79:45: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |                     for(int i = a.size()/2;i<a.size();i++){
      |                                            ~^~~~~~~~~
icc.cpp:88:41: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |                 for(int i = b.size()/2;i<b.size();i++){
      |                                        ~^~~~~~~~~
icc.cpp:100:45: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |                     for(int i = a.size()/2;i<a.size();i++){
      |                                            ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2908 KB Ok! 108 queries used.
2 Correct 5 ms 2908 KB Ok! 121 queries used.
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 2908 KB Ok! 658 queries used.
2 Correct 36 ms 2980 KB Ok! 881 queries used.
3 Correct 42 ms 2908 KB Ok! 879 queries used.
# 결과 실행 시간 메모리 Grader output
1 Correct 91 ms 2984 KB Ok! 1701 queries used.
2 Correct 118 ms 2980 KB Ok! 2190 queries used.
3 Correct 100 ms 2984 KB Ok! 1963 queries used.
4 Correct 103 ms 2980 KB Ok! 1901 queries used.
# 결과 실행 시간 메모리 Grader output
1 Correct 96 ms 2980 KB Ok! 1859 queries used.
2 Correct 113 ms 2976 KB Ok! 1888 queries used.
3 Correct 115 ms 2908 KB Ok! 1997 queries used.
4 Correct 108 ms 3232 KB Ok! 1894 queries used.
# 결과 실행 시간 메모리 Grader output
1 Incorrect 107 ms 2976 KB Too many queries! 2035 out of 1775
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 109 ms 2992 KB Too many queries! 2053 out of 1625
2 Halted 0 ms 0 KB -