#include "icc.h"
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <cstdio>
using namespace std;
vector<vector<int>> components;
int a[200],len_a;
int b[200],len_b;
int c[200],len_c;
int d[200],len_d;
const int LIM = 2;
int my_query(vector<int> &c1,vector<int> &c2){
len_a = 0;
for(auto it:c1){
a[len_a++] = it;
}
len_b = 0;
for(auto it:c2){
b[len_b++] = it;
}
if(len_a == 0 || len_b == 0){
return 0;
}
return query(len_a,len_b,a,b);
}
int my_query(vector< vector<int> > &c1,vector< vector<int> > &c2){
len_a = 0;
for(auto it:c1){
for(auto it2:it){
a[len_a++] = it2;
}
}
len_b = 0;
for(auto it:c2){
for(auto it2:it){
b[len_b++] = it2;
}
}
if(len_a == 0 || len_b == 0){
return 0;
}
return query(len_a,len_b,a,b);
}
void run(int n){
srand(time(NULL));
for(int i = 1;i <= n;i++){
components.push_back({i});
}
for(int t = 1;t < n;t++){
random_shuffle(components.begin(),components.end());
vector<vector<int>> c1,c2;
for(int i = 0;i < (int)components.size() / 2;i++){
c1.push_back(components[i]);
}
for(int i = (int)components.size() / 2;i < (int)components.size();i++){
c2.push_back(components[i]);
}
while(c1.size() + c2.size() > LIM){
while(my_query(c1,c2) == 0){
random_shuffle(c1.begin(),c1.end());
random_shuffle(c2.begin(),c2.end());
vector<vector<int>> nc1,nc2;
for(int i = 0;i < (int)c1.size() / 2;i++){
nc1.push_back(c1[i]);
}
for(int i = (int)c1.size() / 2;i < (int)c1.size();i++){
nc1.push_back(c1[i]);
}
for(int i = 0;i < (int)c2.size() / 2;i++){
nc2.push_back(c2[i]);
}
for(int i = (int)c2.size() / 2;i < (int)c2.size();i++){
nc2.push_back(c2[i]);
}
swap(c1,nc1);
swap(c2,nc2);
}
vector<vector<int>> nc1,nc2,nc3,nc4;
for(int i = 0;i < (int)c1.size() / 2;i++){
nc1.push_back(c1[i]);
}
for(int i = (int)c1.size() / 2;i < (int)c1.size();i++){
nc2.push_back(c1[i]);
}
for(int i = 0;i < (int)c2.size() / 2;i++){
nc3.push_back(c2[i]);
}
for(int i = (int)c2.size() / 2;i < (int)c2.size();i++){
nc4.push_back(c2[i]);
}
if(my_query(nc1,nc3)){
swap(c1,nc1);
swap(c2,nc3);
}
else if(my_query(nc1,nc4)){
swap(c1,nc1);
swap(c2,nc4);
}
else if(my_query(nc2,nc3)){
swap(c1,nc2);
swap(c2,nc3);
}
else{
swap(c1,nc2);
swap(c2,nc4);
}
}
vector<int> fst_comp = c1[0];
vector<int> snd_comp = c2[0];
for(auto &it:components){
if(it == snd_comp){
swap(it,components.back());
}
}
components.pop_back();
for(auto &it:components){
if(it == fst_comp){
for(auto it2:snd_comp){
it.push_back(it2);
}
}
}
while((int)fst_comp.size() + (int)snd_comp.size() > LIM){
vector<int> nc1,nc2,nc3,nc4;
for(int i = 0;i < (int)fst_comp.size() / 2;i++){
nc1.push_back(fst_comp[i]);
}
for(int i = (int)fst_comp.size() / 2;i < (int)fst_comp.size();i++){
nc2.push_back(fst_comp[i]);
}
for(int i = 0;i < (int)snd_comp.size() / 2;i++){
nc3.push_back(snd_comp[i]);
}
for(int i = (int)snd_comp.size() / 2;i < (int)snd_comp.size();i++){
nc4.push_back(snd_comp[i]);
}
if(my_query(nc1,nc3)){
swap(fst_comp,nc1);
swap(snd_comp,nc3);
}
else if(my_query(nc1,nc4)){
swap(fst_comp,nc1);
swap(snd_comp,nc4);
}
else if(my_query(nc2,nc3)){
swap(fst_comp,nc2);
swap(snd_comp,nc3);
}
else{
swap(fst_comp,nc2);
swap(snd_comp,nc4);
}
}
setRoad(fst_comp[0],snd_comp[0]);
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
169 ms |
632 KB |
Number of queries more than 3000 out of 1500 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
345 ms |
504 KB |
Number of queries more than 5000 out of 2500 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
508 ms |
504 KB |
Number of queries more than 4500 out of 2250 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
490 ms |
504 KB |
Number of queries more than 4000 out of 2000 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
391 ms |
632 KB |
Number of queries more than 3550 out of 1775 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
400 ms |
504 KB |
Number of queries more than 3250 out of 1625 |
2 |
Halted |
0 ms |
0 KB |
- |