제출 #1268485

#제출 시각아이디문제언어결과실행 시간메모리
1268485Noname_1900늑대인간 (IOI18_werewolf)C++17
15 / 100
4091 ms32104 KiB
#include "werewolf.h" #include<bits/stdc++.h> using namespace std; const int NMAX = 200000; vector<int> chemins[NMAX]; int dejaVu[2][NMAX]; int iDejaVu; bool possible(int noeud, int fin, int interditHomme, int interditLoup, bool etat) { if(dejaVu[etat][noeud] == iDejaVu) return false; dejaVu[etat][noeud] = iDejaVu; if(etat == 0) { if(noeud < interditHomme) { //cout << noeud << " " << etat << " : " << false << endl; return false; } if(possible(noeud, fin, interditHomme, interditLoup, 1)) { //cout << noeud << " " << etat << " : " << true << endl; return true; } } else if(noeud > interditLoup) { //cout << noeud << " " << etat << " : " << false << endl; return false; } if((noeud == fin) && (etat == 1)) { //cout << noeud << " " << etat << " : " << true << endl; return true; } for(auto pro : chemins[noeud]) { if(possible(pro, fin, interditHomme, interditLoup, etat)) { //cout << noeud << " " << etat << " : " << true << endl; return true; } } //cout << noeud << " " << etat << " : " << false << endl; return false; } std::vector<int> check_validity(int N, std::vector<int> X, std::vector<int> Y, std::vector<int> S, std::vector<int> E, std::vector<int> L, std::vector<int> R) { int nbNoeuds = N, nbChemins = X.size(); iDejaVu = 1; for(int i = 0; i < nbChemins; i++) { chemins[X[i]].push_back(Y[i]); chemins[Y[i]].push_back(X[i]); } int Q = S.size(); std::vector<int> A(Q); for (int i = 0; i < Q; ++i) { //cout << "deb " << S[i] << " " << E[i] << " " << L[i] << " " << R[i] << endl; A[i] = possible(S[i], E[i], L[i], R[i], 0); iDejaVu++; } return A; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...