Submission #1239378

#TimeUsernameProblemLanguageResultExecution timeMemory
1239378inesfiSphinx's Riddle (IOI24_sphinx)C++20
36 / 100
33 ms440 KiB
#include "sphinx.h" #include<bits/stdc++.h> using namespace std; // int x = perform_experiment(E); vector<int> mur; vector<int> rep; int n; int calc_compo(vector<pair<int,int>> v){ int nbc=v.size()*3-1; if (v[0].first!=0 and v[0].second!=0){ nbc++; } if (v.back().first!=n-1 and v.back().second!=n-1){ nbc++; } return nbc; } void trouver(vector<pair<int,int>> candidats_voisins){ int couleur=0; while (couleur<n-1 and !candidats_voisins.empty()){ //cout<<42<<endl; /*for (auto i:candidats_voisins){ cout<<i.first<<" "<<i.second<<endl; }*/ vector<int> quest=mur; for (auto c:candidats_voisins){ quest[c.first]=-1; // la case de la question quest[c.second]=couleur; // la case voisine pour la question } int nbcompo=calc_compo(candidats_voisins); //cout<<nbcompo<<endl; int vrai_nbcompo=perform_experiment(quest); /*cout<<vrai_nbcompo<<endl; for (int i:quest){ cout<<i<<" "; } cout<<endl;*/ if (vrai_nbcompo==nbcompo){ couleur++; //cout<<42<<endl; } else { //cout<<42<<endl; int g=0,d=candidats_voisins.size()-1; while (g<d){ int mil=(g+d+1)/2; vector<int> nouv=mur; vector<pair<int,int>> nouv_candidats={}; for (int i=g;i<mil;i++){ nouv[candidats_voisins[i].first]=-1; nouv[candidats_voisins[i].second]=couleur; nouv_candidats.push_back(candidats_voisins[i]); } int nbcompo=calc_compo(nouv_candidats); int vrai_nbcompo=perform_experiment(nouv); if (vrai_nbcompo==nbcompo){ g=mil; } else { d=mil-1; } } rep[candidats_voisins[g].first]=couleur; vector<pair<int,int>> nouv_candidats={}; for (int i=0;i<(int)candidats_voisins.size();i++){ if (i!=g){ nouv_candidats.push_back(candidats_voisins[i]); } } candidats_voisins=nouv_candidats; } } for (auto c:candidats_voisins){ rep[c.first]=n-1; } } vector<int> find_colours(int N,vector<int> deb,vector<int> fin) { n=N; for (int i=0;i<n;i++){ mur.push_back(n); rep.push_back(n); } vector<pair<int,int>> quest={}; for (int i=0;i<n-1;i+=3){ quest.push_back({i,i+1}); } trouver(quest); //return {0}; //cout<<42<<endl; //return {0}; quest={}; for (int i=1;i<n;i+=3){ quest.push_back({i,i-1}); } trouver(quest); quest={}; for (int i=2;i<n;i+=3){ quest.push_back({i,i-1}); } trouver(quest); quest={}; if (n%3==1){ trouver({{n-1,n-2}}); } return rep; }
#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...