// only miss the sun when it starts to snow
#include<bits/stdc++.h>
#include "icc.h"
#define unit icc
#define F first
#define S second
#define PB push_back
#define sz(s) int((s).size())
#define bit(n,k) (((n)>>(k))&1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int maxn=110,mod=1e9+7;
const ll inf=1e18;
int bos[maxn], n;
vector<int> v[maxn], A, B, vec, vec0, vec1;
int arr1[maxn], arr2[maxn];
/*
void setRoad(int a,int b){
cout<<"HEYY "<<a<<" "<<b<<endl;
}
bool query(int n,int m,int *a,int *b){
cout<<n<<": ";
for(int i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
cout<<m<<": ";
for(int i=0;i<m;i++) cout<<b[i]<<" ";
cout<<endl;
bool x; cin>>x;
return x;
}
*/
bool ask(){
if(sz(A)==0 || sz(B)==0) return 0;
int N=sz(A), M=sz(B);
for(int i=0;i<N;i++)
arr1[i]= A[i]+1;
for(int i=0;i<M;i++)
arr2[i]= B[i]+1;
return query(N,M,arr1,arr2);
}
void operator += (vector<int>&a,vector<int>&b){
for(int x:b) a.PB(x);
}
void Merge(int a,int b){
a=bos[a], b=bos[b];
if(sz(v[a]) < sz(v[b])) swap(a,b);
for(int x:v[b]) bos[x]=a, v[a].PB(x);
v[b].clear();
}
int solve(vector<int> &v1, vector<int>&v2){
int bt=32-__builtin_clz(sz(v1));
B=v2;
int ans=0;
for(int i=0;i<bt;i++){
A.clear();
for(int j=0;j<sz(v1);j++)
if(bit(j,i)) A.PB(v1[j]);
if(ask()) ans^=(1<<i);
}
return v1[ans];
}
void proc(){
vec.clear();
for(int i=0;i<n;i++){
if(bos[i]==i) vec.PB(i);
}
int bt=32-__builtin_clz(sz(vec));
int df=-1;
vector<int> rndm(bt);
for(int i=0;i<bt;i++)
rndm[i]=i;
random_shuffle(rndm.begin(), rndm.end() );
for(int i:rndm){
A.clear(), B.clear();
for(int j=0;j<sz(vec);j++){
if(bit(j,i)) A+= v[vec[j]];
else B+= v[vec[j]];
}
if(ask()){
df=i;
break;
}
}
assert(df!=-1);
vec0=A, vec1=B;
int u=solve(vec0,vec1), v=solve(vec1,vec0);
setRoad(u+1,v+1), Merge(u,v);
}
void run(int N){
srand(time(0));
::n=N;
for(int i=0;i<n;i++)
bos[i]=i, v[i].PB(i);
for(int i=0;i<n-1;i++)
proc();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
504 KB |
Ok! 98 queries used. |
2 |
Correct |
9 ms |
504 KB |
Ok! 102 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
45 ms |
504 KB |
Ok! 570 queries used. |
2 |
Correct |
60 ms |
504 KB |
Ok! 693 queries used. |
3 |
Correct |
55 ms |
504 KB |
Ok! 689 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
157 ms |
604 KB |
Ok! 1514 queries used. |
2 |
Correct |
173 ms |
572 KB |
Ok! 1682 queries used. |
3 |
Correct |
161 ms |
624 KB |
Ok! 1550 queries used. |
4 |
Correct |
166 ms |
580 KB |
Ok! 1606 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
166 ms |
504 KB |
Ok! 1604 queries used. |
2 |
Correct |
167 ms |
632 KB |
Ok! 1654 queries used. |
3 |
Correct |
172 ms |
504 KB |
Ok! 1690 queries used. |
4 |
Correct |
157 ms |
504 KB |
Ok! 1540 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
168 ms |
564 KB |
Ok! 1672 queries used. |
2 |
Correct |
169 ms |
504 KB |
Ok! 1677 queries used. |
3 |
Correct |
172 ms |
504 KB |
Ok! 1687 queries used. |
4 |
Correct |
172 ms |
636 KB |
Ok! 1691 queries used. |
5 |
Correct |
162 ms |
572 KB |
Ok! 1595 queries used. |
6 |
Correct |
164 ms |
504 KB |
Ok! 1615 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
174 ms |
504 KB |
Too many queries! 1698 out of 1625 |
2 |
Halted |
0 ms |
0 KB |
- |