This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "icc.h"
using namespace std;
int przewodnik[200];
vector<int> spojne[200];
vector<int> mam;
int n;
int aaa[200],bbb[200];
int Query(int a1,int b1,vector<int> a,vector<int> b)
{
for(int i=0;i<a1;i++)
aaa[i]=a[i];
for(int i=0;i<b1;i++)
bbb[i]=b[i];
return query(a1,b1,aaa,bbb);
}
void dodaj(int x,int y)
{
setRoad(x,y);
x=przewodnik[x];
y=przewodnik[y];
for(int i=0;i<spojne[x].size();i++)
spojne[y].push_back(spojne[x][i]),przewodnik[spojne[x][i]]=y;
spojne[x].clear();
mam.clear();
for(int i=1;i<=n;i++)
if(spojne[i].size())
mam.push_back(i);
}
void pytaj(vector<pair<int,int>> przedzialy)
{
vector<int> a[2];
for(int i=0;i<przedzialy.size();i++)
for(int j=przedzialy[i].first;j<=przedzialy[i].second;j++)
for(int b=0;b<spojne[mam[j]].size();b++)
a[i%2].push_back(spojne[mam[j]][b]);
int co=Query(a[0].size(),a[1].size(),a[0],a[1]);
if(co==0)
{
vector<pair<int,int> > jazda;
for(int i=0;i<przedzialy.size();i++)
{
if(przedzialy[i].first==przedzialy[i].second)
continue;
jazda.push_back({przedzialy[i].first,(przedzialy[i].first+przedzialy[i].second)/2});
jazda.push_back({(przedzialy[i].first+przedzialy[i].second)/2+1,przedzialy[i].second});
}
pytaj(jazda);
return;
}
int pocz=0,kon=a[0].size(),sre,ostd;
while(pocz<kon)
{
sre=(pocz+kon)/2;
vector<int> pytanko;
for(int i=pocz;i<=sre;i++)
pytanko.push_back(a[0][i]);
int co=Query(pytanko.size(),a[1].size(),pytanko,a[1]);
if(co)
{
ostd=sre;
kon=sre;
}
else pocz=sre+1;
}
int pocz1=0,kon1=a[1].size(),sre1,ostd1;
while(pocz1<kon1)
{
sre1=(pocz1+kon1)/2;
vector<int> pytanko;
for(int i=pocz1;i<=sre1;i++)
pytanko.push_back(a[1][i]);
int co=Query(pytanko.size(),a[0].size(),pytanko,a[0]);
if(co)
{
ostd1=sre1;
kon1=sre1;
}
else pocz1=sre1+1;
}
dodaj(a[0][ostd],a[1][ostd1]);
return;
}
void run(int N)
{
n=N;
for(int i=1;i<=n;i++)
spojne[i].push_back(i),mam.push_back(i),przewodnik[i]=i;
for(int i=1;i<n;i++)
{
vector<pair<int,int> > przedzialy;
przedzialy.push_back({0,mam.size()/2-1});
przedzialy.push_back({mam.size()/2,mam.size()-1});
pytaj(przedzialy);
}
}
Compilation message (stderr)
icc.cpp: In function 'void dodaj(int, int)':
icc.cpp:22:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
22 | for(int i=0;i<spojne[x].size();i++)
| ~^~~~~~~~~~~~~~~~~
icc.cpp: In function 'void pytaj(std::vector<std::pair<int, int> >)':
icc.cpp:33:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
33 | for(int i=0;i<przedzialy.size();i++)
| ~^~~~~~~~~~~~~~~~~~
icc.cpp:35:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
35 | for(int b=0;b<spojne[mam[j]].size();b++)
| ~^~~~~~~~~~~~~~~~~~~~~~
icc.cpp:41:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
41 | for(int i=0;i<przedzialy.size();i++)
| ~^~~~~~~~~~~~~~~~~~
icc.cpp:81:32: warning: 'ostd1' may be used uninitialized in this function [-Wmaybe-uninitialized]
81 | dodaj(a[0][ostd],a[1][ostd1]);
| ^
icc.cpp:81:20: warning: 'ostd' may be used uninitialized in this function [-Wmaybe-uninitialized]
81 | dodaj(a[0][ostd],a[1][ostd1]);
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |