Submission #1281625

#TimeUsernameProblemLanguageResultExecution timeMemory
1281625SSKMFDango Maker (JOI18_dango_maker)C++20
13 / 100
5 ms584 KiB
#include <bits/stdc++.h> using namespace std; vector <int> adiacenta[1000001]; int inlocuitor[3000][3000] , pereche[3000001] , moment[1000001]; char matrice[3000][3001]; inline bool CautaPereche (const int nod) { if (moment[nod] == moment[0]) { return false; } moment[nod] = moment[0]; for (auto& vecin : adiacenta[nod]) { if (!pereche[vecin]) { pereche[vecin] = nod; pereche[nod] = vecin; return true; } } for (auto& vecin : adiacenta[nod]) { if (CautaPereche(pereche[vecin])) { pereche[vecin] = nod; pereche[nod] = vecin; return true; } } return false; } int main () { ios :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int linii , coloane; cin >> linii >> coloane; for (int linie = 0 ; linie < linii ; linie++) { cin >> matrice[linie]; } int numar_noduri_1 = 0; for (int linie = 0 ; linie < linii ; linie++) { for (int coloana = 0 ; coloana < coloane ; coloana++) { if (matrice[linie][coloana] == 'R' && ((coloana + 2 < coloane && matrice[linie][coloana + 1] == 'G' && matrice[linie][coloana + 2] == 'W') || (linie + 2 < linii && matrice[linie + 1][coloana] == 'G' && matrice[linie + 2][coloana] == 'W'))) { inlocuitor[linie][coloana] = ++numar_noduri_1; } } } int numar_noduri_2 = 0; for (int linie = 0 ; linie < linii ; linie++) { for (int coloana = 0 ; coloana < coloane ; coloana++) { if (matrice[linie][coloana] == 'W' && ((coloana - 2 >= 0 && matrice[linie][coloana - 1] == 'G' && matrice[linie][coloana - 2] == 'R') || (linie - 2 >= 0 && matrice[linie - 1][coloana] == 'G' && matrice[linie - 2][coloana] == 'R'))) { inlocuitor[linie][coloana] = ++numar_noduri_2 + numar_noduri_1; } } } for (int linie = 0 ; linie < linii ; linie++) { for (int coloana = 0 ; coloana < coloane ; coloana++) { if (matrice[linie][coloana] == 'R' && inlocuitor[linie][coloana]) { if (coloana + 2 < coloane && matrice[linie][coloana + 1] == 'G' && matrice[linie][coloana + 2] == 'W') { adiacenta[inlocuitor[linie][coloana]].push_back(inlocuitor[linie][coloana + 2]); } if (linie + 2 < linii && matrice[linie + 1][coloana] == 'G' && matrice[linie + 2][coloana] == 'W') { adiacenta[inlocuitor[linie][coloana]].push_back(inlocuitor[linie + 2][coloana]); } } } } int cuplaj = 0; while (true) { moment[0]++; bool gasit = false; for (int nod = 1 ; nod <= numar_noduri_1 ; nod++) { if (!pereche[nod] && CautaPereche(nod)) { gasit = true; cuplaj++; } } if (!gasit) { break; } } cout << cuplaj; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...