#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
const int N = 101;
int p[N], sz[N];
vector<int> comp[N];
int find(int v){
if(p[v]==v)return v;
return p[v]=find(p[v]);
}
void merge(int v, int u){
v=find(v);
u=find(u);
if(u==v)return;
if(sz[u]<sz[v])swap(u, v);
p[v]=u;
sz[u]+=sz[v];
for(int e : comp[v])comp[u].push_back(e);
}
int genrand(){
int ret=0;
for(int i=0; i< 10; i++){
ret+=(1<<i) * (rand()%2);
}
return ret;
}
void run(int n){
for(int i=1; i<=n; i++){
p[i]=i;
sz[i]=1;
comp[i].push_back(i);
}
for(int i=0; i< n-1; i++){
set<int> st;
for(int j=1; j<=n; j++)st.insert(find(j));
vector<int> a;
for(int i=1; i< a.size(); i++){
int ind = genrand()%(i+1);
swap(a[ind], a[i]);
}
for(auto p : st)a.push_back(p);
vector<int> st1, st2;
for(int j=0; j<7; j++){
for(int k=0; k<a.size(); k++){
int x = k>>j;
if(x&1){
for(int e : comp[a[k]])st1.push_back(e);
}
else{
for(int e : comp[a[k]])st2.push_back(e);
}
}
int sz1=st1.size(), sz2=st2.size();
int fst[sz1], scd[sz2];
for(int i=0; i< sz1; i++)fst[i]=st1[i];
for(int i=0; i< sz2; i++)scd[i]=st2[i];
if(query(sz1, sz2, fst, scd))break;
st1.clear(); st2.clear();
}
vector<int> nscd = st2;
int sz1 = st1.size();
int fst[sz1];
for(int i=0; i< sz1; i++)fst[i]=st1[i];
while(nscd.size()>1){
for(int i=1; i<nscd.size(); i++){
int ind = genrand()%(i+1);
swap(nscd[i], nscd[ind]);
}
int sz = nscd.size()/2;
int scd[sz];
for(int i=0; i< sz; i++)scd[i]=nscd[i];
if(query(sz1, sz, fst, scd)){
while(nscd.size()>sz)nscd.pop_back();
}
else{
reverse(nscd.begin(), nscd.end());
for(int i=0; i<sz; i++)nscd.pop_back();
}
}
int scd[1] = {nscd[0]};
vector<int> nfst = st1;
while(nfst.size()>1){
for(int i=1; i<nfst.size(); i++){
int ind = genrand()%(i+1);
swap(nfst[i], nfst[ind]);
}
int sz=nfst.size()/2;
int fst[sz];
for(int i=0; i< sz; i++)fst[i]=nfst[i];
if(query(sz, 1, fst, scd)){
while(nfst.size()>sz)nfst.pop_back();
}
else{
reverse(nfst.begin(), nfst.end());
for(int i=0; i< sz; i++)nfst.pop_back();
}
}
setRoad(nfst[0], nscd[0]);
merge(nfst[0], nscd[0]);
}
}
Compilation message
icc.cpp: In function 'void run(int)':
icc.cpp:43:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
43 | for(int i=1; i< a.size(); i++){
| ~^~~~~~~~~~
icc.cpp:50:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
50 | for(int k=0; k<a.size(); k++){
| ~^~~~~~~~~
icc.cpp:71:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
71 | for(int i=1; i<nscd.size(); i++){
| ~^~~~~~~~~~~~
icc.cpp:79:34: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
79 | while(nscd.size()>sz)nscd.pop_back();
| ~~~~~~~~~~~^~~
icc.cpp:89:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
89 | for(int i=1; i<nfst.size(); i++){
| ~^~~~~~~~~~~~
icc.cpp:97:34: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
97 | while(nfst.size()>sz)nfst.pop_back();
| ~~~~~~~~~~~^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
600 KB |
Ok! 108 queries used. |
2 |
Correct |
4 ms |
604 KB |
Ok! 97 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
640 KB |
Ok! 532 queries used. |
2 |
Correct |
28 ms |
600 KB |
Ok! 672 queries used. |
3 |
Correct |
27 ms |
604 KB |
Ok! 667 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
73 ms |
620 KB |
Ok! 1398 queries used. |
2 |
Correct |
83 ms |
624 KB |
Ok! 1611 queries used. |
3 |
Correct |
76 ms |
600 KB |
Ok! 1484 queries used. |
4 |
Correct |
79 ms |
604 KB |
Ok! 1516 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
82 ms |
604 KB |
Ok! 1600 queries used. |
2 |
Correct |
78 ms |
604 KB |
Ok! 1510 queries used. |
3 |
Correct |
92 ms |
604 KB |
Ok! 1633 queries used. |
4 |
Correct |
74 ms |
604 KB |
Ok! 1445 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
83 ms |
628 KB |
Ok! 1619 queries used. |
2 |
Correct |
86 ms |
604 KB |
Ok! 1645 queries used. |
3 |
Correct |
86 ms |
604 KB |
Ok! 1639 queries used. |
4 |
Correct |
97 ms |
636 KB |
Ok! 1615 queries used. |
5 |
Correct |
78 ms |
624 KB |
Ok! 1493 queries used. |
6 |
Correct |
83 ms |
620 KB |
Ok! 1589 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
84 ms |
604 KB |
Too many queries! 1659 out of 1625 |
2 |
Halted |
0 ms |
0 KB |
- |