제출 #375694

#제출 시각아이디문제언어결과실행 시간메모리
375694peijarDango Maker (JOI18_dango_maker)C++17
33 / 100
2106 ms260972 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN =3000; char couleur[MAXN][MAXN]; int idDumpling[MAXN][MAXN]; vector<int> adj[MAXN*MAXN]; int matchAvec[MAXN * MAXN]; bool vu[MAXN * MAXN]; bool dfs(int u) { if (vu[u]) return false; vu[u] = true; for (auto v : adj[u]) if (matchAvec[v] == -1 or dfs(matchAvec[v])) { matchAvec[v] = u; return true; } return false; } signed main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int nbLig, nbCol; cin >> nbLig >> nbCol; for (int iLig(0); iLig < nbLig; ++iLig) for (int iCol(0); iCol < nbCol; ++iCol) cin >> couleur[iLig][iCol]; int nbDumplingsPotentiels(0); for (int iLig(0); iLig < nbLig; ++iLig) for (int iCol(0); iCol < nbCol; ++iCol) { if (iLig + 2 < nbLig and couleur[iLig][iCol] == 'R' and couleur[iLig+1][iCol] == 'G' and couleur[iLig+2][iCol] == 'W') nbDumplingsPotentiels++; if (iCol+2 < nbCol and couleur[iLig][iCol] == 'R' and couleur[iLig][iCol+1] == 'G' and couleur[iLig][iCol+2] == 'W') nbDumplingsPotentiels++; } int nbVu(0); for (int iLig(0); iLig < nbLig; ++iLig) for (int iCol(0); iCol < nbCol; ++iCol) { idDumpling[iLig][iCol] = -1; if (iLig + 2 < nbLig and couleur[iLig][iCol] == 'R' and couleur[iLig+1][iCol] == 'G' and couleur[iLig+2][iCol] == 'W') idDumpling[iLig][iCol] = nbVu++; } int nbGauche = nbVu; nbVu = 0; for (int iLig(0); iLig < nbLig; ++iLig) for (int iCol(0); iCol < nbCol; ++iCol) if (iCol+2 < nbCol and couleur[iLig][iCol] == 'R' and couleur[iLig][iCol+1] == 'G' and couleur[iLig][iCol+2] == 'W') { // R G W matchAvec[nbVu] = -1; if (idDumpling[iLig][iCol] != -1) adj[idDumpling[iLig][iCol]].push_back(nbVu); if (iLig and idDumpling[iLig-1][iCol+1] != -1) adj[idDumpling[iLig-1][iCol+1]].push_back(nbVu); if (iLig > 1 and idDumpling[iLig-2][iCol+2] != -1) adj[idDumpling[iLig-2][iCol+2]].push_back(nbVu); ++nbVu; } int maxMatching(0); for (int i(0); i < nbGauche; ++i) { fill(vu, vu + nbGauche, false); maxMatching += dfs(i); } int ret = nbDumplingsPotentiels - maxMatching; cout << ret << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...