Submission #173855

#TimeUsernameProblemLanguageResultExecution timeMemory
173855Ruxandra985ICC (CEOI16_icc)C++14
90 / 100
162 ms636 KiB
#include <bits/stdc++.h> #include "icc.h" using namespace std; int f[110] , w[110] , a[110] , b[110] , fq[110]; void run (int n){ int i , p , q , bit; for (i=1;i<=n;i++) f[i] = i; for (int mc = 1 ; mc < n ; mc++){ memset ( fq , 0 , sizeof (fq)); /// vreau sa ma duc in jos cat pot pana gasesc intervalul care contine capetele bit = 0; int tryy = 0; while (true){ /// o sa fac solutia aia mai proasta cu generat random pt ca nuj cum altcumva int nr = rand() % (7 - tryy) + 1; tryy++; i = 0; while (nr){ /// al nr -lea care e 0 if (!fq[i]) nr--; if (!nr){ bit = i; break; } i++; } fq[bit] = 1; p = q = 0; for (i=1;i<=n;i++){ if (f[i] & (1 << bit)) a[p++] = i; } for (i=1;i<=n;i++){ if ((f[i] & (1 << bit)) == 0) b[q++] = i; } if (query( p , q , a , b ) == 1){ /// un capat de muchie e intr o jumatate , celalalt capat in cealalta break; } else { /// ambele capete sunt in aceeasi jum continue; } } /// ai vectorii a si b /// a are p elem si b are q /// a si b sunt indexate de la 0 /// pt a while (p > 1){ if (query (p / 2 , q , a , b) == 1) p/=2; else { for (i = p/2 ; i < p ; i++) a[i - p/2] = a[i]; p = p - p / 2; } } /// pt b while (q > 1){ if (query (p , q / 2 , a , b) == 1) q/=2; else { for (i = q/2 ; i < q ; i++) b[i - q/2] = b[i]; q = q - q / 2; } } setRoad(a[0] , b[0]); /// acum trebuie sa modificam f ul int u1 = min( f[a[0]] , f[b[0]] ); int u2 = max( f[a[0]] , f[b[0]] ); for (i=1;i<=n;i++){ if (f[i] == u2) f[i] = u1; else if (f[i] == n - mc + 1 && u2 != n - mc + 1) f[i] = u2; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...