//o pereche de 2 cameleoni (x,y) va da rasp 1 daca: color(x)=color(y), x il iubeste pe y, y il iubeste pe x
//impart in 4 seturi a.i. cameleonii din cele 4 seturi sunt independenti
#include"chameleon.h"
#include<vector>
using namespace std;
vector<int> Sets[4];
vector<int> Adj[1005];
bool Answered[1005];
int Loves[1005],Loved[1005]; //loves=pe cine, loved=de cine
int getCandidate(int cham, int s, int dec)
{
vector<int> Aux;
int poz=dec-1;
for(int i=9; i>=0; i--)
{
if(poz+(1<<i)<Sets[s].size())
{
Aux.clear();
Aux.push_back(cham);
for(int j=dec; j<=poz+(1<<i); j++)
Aux.push_back(Sets[s][j]);
if(Query(Aux)==Aux.size())
poz+=(1<<i);
}
}
poz++;
return poz;
}
void Solve(int n)
{
for(int i=1; i<=2*n; i++)
{
for(int j=0; j<4; j++)
{
Sets[j].push_back(i);
if(Query(Sets[j])==Sets[j].size())
break;
Sets[j].pop_back();
}
}
for(int i=0; i<4; i++)
{
for(auto cham:Sets[i])
{
for(int j=i+1; j<4; j++)
{
int lastcand=-1;
while(1)
{
int cand=getCandidate(cham,j,lastcand+1);
if(cand==Sets[j].size())
break;
Adj[cham].push_back(Sets[j][cand]);
Adj[Sets[j][cand]].push_back(cham);
lastcand=cand;
}
}
}
}
for(int i=1; i<=2*n; i++)
{
if(Answered[i])
continue;
if(Adj[i].size()==1) //i iubeste si este iubit de acelasi cameleon, deci cel din Adj este cel de aceasi culoare
{
Answer(i,Adj[i][0]);
Answered[i]=1;
Answered[Adj[i][0]]=1;
}
}
vector<int> Aux;
for(int i=1; i<=2*n; i++)
{
if(Adj[i].size()==1)
continue;
Aux.clear();
Aux.push_back(i);
Aux.push_back(Adj[i][0]);
Aux.push_back(Adj[i][1]);
if(Query(Aux)==1)
{
Loves[i]=Adj[i][2];
Loved[Adj[i][2]]=i;
continue;
}
Aux[2]=Adj[i][2];
if(Query(Aux)==1)
{
Loves[i]=Adj[i][1];
Loved[Adj[i][1]]=i;
continue;
}
Aux[1]=Adj[i][1];
if(Query(Aux)==1)
{
Loves[i]=Adj[i][0];
Loved[Adj[i][0]]=i;
continue;
}
}
for(int i=1; i<=2*n; i++)
{
if(Answered[i])
continue;
int per=Adj[i][0]^Adj[i][1]^Adj[i][2]^Loves[i]^Loved[i];
Answer(i,per);
Answered[per]=1;
Answered[i]=1;
}
}
Compilation message
chameleon.cpp: In function 'int getCandidate(int, int, int)':
chameleon.cpp:19:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(poz+(1<<i)<Sets[s].size())
~~~~~~~~~~^~~~~~~~~~~~~~~
chameleon.cpp:26:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(Query(Aux)==Aux.size())
~~~~~~~~~~^~~~~~~~~~~~
chameleon.cpp: In function 'void Solve(int)':
chameleon.cpp:42:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(Query(Sets[j])==Sets[j].size())
~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
chameleon.cpp:60:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(cand==Sets[j].size())
~~~~^~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
384 KB |
Output is correct |
2 |
Correct |
4 ms |
384 KB |
Output is correct |
3 |
Correct |
39 ms |
384 KB |
Output is correct |
4 |
Correct |
42 ms |
432 KB |
Output is correct |
5 |
Correct |
40 ms |
384 KB |
Output is correct |
6 |
Correct |
39 ms |
384 KB |
Output is correct |
7 |
Correct |
41 ms |
384 KB |
Output is correct |
8 |
Correct |
39 ms |
384 KB |
Output is correct |
9 |
Correct |
39 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
384 KB |
Output is correct |
2 |
Correct |
5 ms |
384 KB |
Output is correct |
3 |
Correct |
4 ms |
384 KB |
Output is correct |
4 |
Correct |
4 ms |
384 KB |
Output is correct |
5 |
Correct |
4 ms |
384 KB |
Output is correct |
6 |
Correct |
4 ms |
384 KB |
Output is correct |
7 |
Correct |
4 ms |
384 KB |
Output is correct |
8 |
Correct |
4 ms |
384 KB |
Output is correct |
9 |
Correct |
5 ms |
416 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
384 KB |
Output is correct |
2 |
Correct |
5 ms |
384 KB |
Output is correct |
3 |
Correct |
4 ms |
384 KB |
Output is correct |
4 |
Correct |
4 ms |
384 KB |
Output is correct |
5 |
Correct |
4 ms |
384 KB |
Output is correct |
6 |
Correct |
4 ms |
384 KB |
Output is correct |
7 |
Correct |
4 ms |
384 KB |
Output is correct |
8 |
Correct |
4 ms |
384 KB |
Output is correct |
9 |
Correct |
5 ms |
416 KB |
Output is correct |
10 |
Correct |
6 ms |
384 KB |
Output is correct |
11 |
Correct |
5 ms |
432 KB |
Output is correct |
12 |
Correct |
5 ms |
384 KB |
Output is correct |
13 |
Correct |
5 ms |
384 KB |
Output is correct |
14 |
Correct |
5 ms |
384 KB |
Output is correct |
15 |
Correct |
5 ms |
384 KB |
Output is correct |
16 |
Correct |
5 ms |
384 KB |
Output is correct |
17 |
Correct |
5 ms |
384 KB |
Output is correct |
18 |
Correct |
5 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
384 KB |
Output is correct |
2 |
Correct |
4 ms |
384 KB |
Output is correct |
3 |
Correct |
52 ms |
384 KB |
Output is correct |
4 |
Correct |
56 ms |
508 KB |
Output is correct |
5 |
Correct |
55 ms |
384 KB |
Output is correct |
6 |
Correct |
53 ms |
384 KB |
Output is correct |
7 |
Correct |
53 ms |
384 KB |
Output is correct |
8 |
Correct |
54 ms |
384 KB |
Output is correct |
9 |
Correct |
52 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
384 KB |
Output is correct |
2 |
Correct |
4 ms |
384 KB |
Output is correct |
3 |
Correct |
39 ms |
384 KB |
Output is correct |
4 |
Correct |
42 ms |
432 KB |
Output is correct |
5 |
Correct |
40 ms |
384 KB |
Output is correct |
6 |
Correct |
39 ms |
384 KB |
Output is correct |
7 |
Correct |
41 ms |
384 KB |
Output is correct |
8 |
Correct |
39 ms |
384 KB |
Output is correct |
9 |
Correct |
39 ms |
384 KB |
Output is correct |
10 |
Correct |
4 ms |
384 KB |
Output is correct |
11 |
Correct |
5 ms |
384 KB |
Output is correct |
12 |
Correct |
4 ms |
384 KB |
Output is correct |
13 |
Correct |
4 ms |
384 KB |
Output is correct |
14 |
Correct |
4 ms |
384 KB |
Output is correct |
15 |
Correct |
4 ms |
384 KB |
Output is correct |
16 |
Correct |
4 ms |
384 KB |
Output is correct |
17 |
Correct |
4 ms |
384 KB |
Output is correct |
18 |
Correct |
5 ms |
416 KB |
Output is correct |
19 |
Correct |
6 ms |
384 KB |
Output is correct |
20 |
Correct |
5 ms |
432 KB |
Output is correct |
21 |
Correct |
5 ms |
384 KB |
Output is correct |
22 |
Correct |
5 ms |
384 KB |
Output is correct |
23 |
Correct |
5 ms |
384 KB |
Output is correct |
24 |
Correct |
5 ms |
384 KB |
Output is correct |
25 |
Correct |
5 ms |
384 KB |
Output is correct |
26 |
Correct |
5 ms |
384 KB |
Output is correct |
27 |
Correct |
5 ms |
384 KB |
Output is correct |
28 |
Correct |
4 ms |
384 KB |
Output is correct |
29 |
Correct |
4 ms |
384 KB |
Output is correct |
30 |
Correct |
52 ms |
384 KB |
Output is correct |
31 |
Correct |
56 ms |
508 KB |
Output is correct |
32 |
Correct |
55 ms |
384 KB |
Output is correct |
33 |
Correct |
53 ms |
384 KB |
Output is correct |
34 |
Correct |
53 ms |
384 KB |
Output is correct |
35 |
Correct |
54 ms |
384 KB |
Output is correct |
36 |
Correct |
52 ms |
384 KB |
Output is correct |
37 |
Incorrect |
65 ms |
384 KB |
Wrong Answer [3] |
38 |
Halted |
0 ms |
0 KB |
- |