#include <bits/stdc++.h>
#include "icc.h"
#define maxN 101
using namespace std;
vector <int> v[maxN];
vector <int> x;
void zameni(int m,int d){
for(int i=0;i<x.size()/2;i++){
int r=i/d;
if(r%2) swap(x[i],x[i+m]);
}
}
pair <int,int> resi(int A,int B,int a[],int b[]){
pair <int,int> ans;
ans=make_pair(-1,-1);
int s[maxN];
int l=0,d=A-1,m;
while(d!=l){
m=(l+d)/2;
for(int i=l;i<m;i++){
s[i-l]=a[i];
}
if(query(B,m-l+1,b,s)) d=m;
else l=m+1;
}
ans.first=l;
l=0,d=B-1;
while(d!=l){
m=(l+d)/2;
for(int i=l;i<m;i++){
s[i-l]=b[i];
}
if(query(A,m-l+1,a,s)) d=m;
else l=m+1;
}
ans.second=l;
return ans;
}
void spoj(int a,int b){
if(a>b) swap(a,b);
for(int i=0;i<v[b].size();i++){
v[a].push_back(v[b][i]);
}
v[b].clear();
}
void run(int n){
int i,A=0,B=0,a[maxN],b[maxN];
for(i=1;i<=n;i++){
v[i].push_back(i);
}
while(n){
for(i=1;i<=maxN;i++){
if(v[i].size()>0) x.push_back(i);
}
for(i=x.size();i<2*(n & -n);i++){
x.push_back(-1);
}
for(i=0;i<n & -n;i++){
if(x[i]!=-1) a[i]=x[i], A++;
}
for(i=n & -n;i<x.size();i++){
if(x[i]!=-1) b[i]=x[i], B++;
}
int m=n & -n,d=m/2;
while(!query(A,B,a,b)){
zameni(m,d);
A=0; B=0;
for(i=0;i<n & -n;i++){
if(x[i]!=-1) a[i]=x[i], A++;
}
for(i=n & -n;i<x.size();i++){
if(x[i]!=-1) b[i]=x[i], B++;
}
d/=2;
}
x.clear();
for(i=0;i<A;i++){
if(a[i]!=-1) x.push_back(a[i]);
}
A=x.size();
for(i=0;i<A;i++){
a[i]=x[i];
}
x.clear();
for(i=0;i<B;i++){
if(b[i]!=-1) x.push_back(b[i]);
}
B=x.size();
for(i=0;i<B;i++){
b[i]=x[i];
}
x.clear();
pair <int,int> r;
r=resi(A,B,a,b);
setRoad(r.first,r.second);
spoj(r.first,r.second);
n--;
}
}
Compilation message
icc.cpp: In function 'void zameni(int, int)':
icc.cpp:10:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<x.size()/2;i++){
^
icc.cpp: In function 'void spoj(int, int)':
icc.cpp:43:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<v[b].size();i++){
^
icc.cpp: In function 'void run(int)':
icc.cpp:61:18: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
for(i=0;i<n & -n;i++){
^
icc.cpp:64:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i=n & -n;i<x.size();i++){
^
icc.cpp:71:22: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
for(i=0;i<n & -n;i++){
^
icc.cpp:74:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i=n & -n;i<x.size();i++){
^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
2044 KB |
Query cities not in range [1, n] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
2044 KB |
Query cities not in range [1, n] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
2044 KB |
Query cities not in range [1, n] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
2044 KB |
Query cities not in range [1, n] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
2044 KB |
Query cities not in range [1, n] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
2044 KB |
Query cities not in range [1, n] |
2 |
Halted |
0 ms |
0 KB |
- |