#include<bits/stdc++.h>
using namespace std;
const int NMAX = 150+1;
int boss[NMAX];
int findBoss(int noeud)
{
if(boss[noeud] == noeud) return noeud;
return boss[noeud] = findBoss(boss[noeud]);
}
void merge(int a, int b)
{
a = findBoss(a);
b = findBoss(b);
boss[b] = a;
}
vector<int> soumissionDif;
void aff(int e, int r, int autre)
{
// cout << e << endl << r << endl << autre << endl;
cout << (r-e)+1 << " ";
// cout << endl;
for(int i = e; i < r; i++) cout << soumissionDif[i] << " ";
// cout << endl;
cout << autre;
cout << endl;
}
int iHabit[NMAX];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int nbE;
cin >> nbE;
for(int i = 0; i < nbE; i++)
{
boss[i+1] = i+1;
}
// cout << "oj" << endl;
soumissionDif.push_back(1);
for(int enfant = 2; enfant <= nbE; enfant++)
{
// cout << enfant << endl;
aff(0, soumissionDif.size(), enfant);
int nbDif;
cin >> nbDif;
if(nbDif == soumissionDif.size()+1)
{
soumissionDif.push_back(enfant);
}
else
{
int deb = 0, fin = soumissionDif.size();
while(deb != fin-1)
{
int milieu = (deb+fin)/2;
aff(deb, milieu, enfant);
cin >> nbDif;
if(nbDif == milieu-deb+1)
deb = milieu;
else
fin = milieu;
}
merge(soumissionDif[deb], enfant);
}
}
int iAMEttre = 1;
cout << 0 << " ";
for(int i = 1; i <= nbE; i++)
{
int bossdeI = findBoss(i);
if(!iHabit[bossdeI])
{
iHabit[bossdeI] = iAMEttre;
iAMEttre++;
}
cout << iHabit[bossdeI] << " ";
}
}
# | 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... |