Submission #68270

#TimeUsernameProblemLanguageResultExecution timeMemory
68270AdrienVannsonCultivation (JOI17_cultivation)C++14
5 / 100
2045 ms20788 KiB
// Sous-tâche 1 & 2 #include <algorithm> #include <iostream> #include <cstdio> #include <array> using namespace std; const int oo = 1000*1000*1000; const int INCONNU = -1; const int TAILLE_MAX = 40; const int NB_MAX_LIGNES = TAILLE_MAX; const int NB_MAX_COLONNES = TAILLE_MAX; const int NB_DIRECTIONS = 4; const int DELTAS_DIRECTIONS[NB_DIRECTIONS][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} }; int nbLignes, nbColonnes; int dynamique[TAILLE_MAX][TAILLE_MAX][TAILLE_MAX][TAILLE_MAX]; int getNbActionsMin (const array<array<bool, NB_MAX_COLONNES>, NB_MAX_LIGNES> &estPlein, const array<int, NB_DIRECTIONS> &nbUtilisations) { int &res = dynamique[ nbUtilisations[0] ][ nbUtilisations[1] ][ nbUtilisations[2] ][ nbUtilisations[3] ]; if (res != INCONNU) { return res; } bool estValide = true; for (int iLigne=0; iLigne<nbLignes; iLigne++) { for (int iColonne=0; iColonne<nbColonnes; iColonne++) { if (!estPlein[iLigne][iColonne]) { estValide = false; } } } if (estValide) { return res = 0; } res = +oo; for (int iDirection=0; iDirection<NB_DIRECTIONS; iDirection++) { auto nouveauEstPlein = estPlein; for (int iLigne=0; iLigne<nbLignes; iLigne++) { for (int iColonne=0; iColonne<nbColonnes; iColonne++) { if (!estPlein[iLigne][iColonne]) { continue; } const int iNouvelleLigne = iLigne + DELTAS_DIRECTIONS[iDirection][0]; const int iNouvelleColonne = iColonne + DELTAS_DIRECTIONS[iDirection][1]; if (iNouvelleLigne < 0 || iNouvelleLigne >= nbLignes || iNouvelleColonne < 0 || iNouvelleColonne >= nbColonnes) { continue; } nouveauEstPlein[iNouvelleLigne][iNouvelleColonne] = true; } } if (nouveauEstPlein != estPlein) { auto nouveauNbUtilisations = nbUtilisations; nouveauNbUtilisations[iDirection]++; res = min(getNbActionsMin(nouveauEstPlein, nouveauNbUtilisations) + 1, res); } } return res; } int main () { fill(***dynamique, ***dynamique+TAILLE_MAX*TAILLE_MAX*TAILLE_MAX*TAILLE_MAX, INCONNU); scanf("%d %d", &nbLignes, &nbColonnes); if (nbLignes > NB_MAX_LIGNES || nbColonnes > NB_MAX_COLONNES) { printf("%d\n", 1/0); return 0; } array<array<bool, NB_MAX_COLONNES>, NB_MAX_LIGNES> estPlein; for (int iLigne=0; iLigne<nbLignes; iLigne++) { for (int iColonne=0; iColonne<nbColonnes; iColonne++) { estPlein[iLigne][iColonne] = false; } } int nbCellulesPleines; scanf("%d", &nbCellulesPleines); for (int iCellule=0; iCellule<nbCellulesPleines; iCellule++) { int iLigne, iColonne; scanf("%d %d", &iLigne, &iColonne); iLigne--, iColonne--; estPlein[iLigne][iColonne] = true; } printf("%d\n", getNbActionsMin(estPlein, {0, 0, 0, 0})); return 0; }

Compilation message (stderr)

cultivation.cpp: In function 'int main()':
cultivation.cpp:95:25: warning: division by zero [-Wdiv-by-zero]
         printf("%d\n", 1/0);
                        ~^~
cultivation.cpp:92:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &nbLignes, &nbColonnes);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cultivation.cpp:108:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &nbCellulesPleines);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
cultivation.cpp:112:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &iLigne, &iColonne);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...