Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage dans intervalle (Couches de peinture)

Concours Algoréa

    9 juin 2021 à 21:39:32

    Salut

    RaoulMad a écrit:

    concernant les histoires de versions de c++ acceptées, Algorea n'est pas un concours de programmation destiné aux développeurs, c'est un concours d'algorithmique destiné aux collégiens et lycéens. Il n'est donc en principe nul besoin d'une connaissance approfondie d'un langage pour résoudre les problèmes.

    Ce n'est pas tant une question de connaissance approfondie du langage. C'est une question que le C++11 et suivants est plus simple à utiliser que le 98. Il permet d’être plus expressif en moins de lignes justement.

    Je doute qu'en python tu te sois interdis l'utilisation de choses telles que `max()` ou des dictionnaires (si le besoin s'en faisait ressentir -- c'est le cas d'un autre exo d'algorea). Rejeter le C++11, c'est rejeter des structures de données et des algos de base prêts à l'emploi. C'est un peu beaucoup dommage. L'essence de ces algos n'est pas de réviser comment les éléments de base sont réalisés. Surtout arrivé à ce niveau de complexité.

    Sans parler des cours de C++ qui n'enseignent pas le C++98 mais le C++17 directement. Et du coup les élèves y verront des choses comme les for-range loops, std::array, unorered_map, des algo avec lambdas, etc.

    -
    Edité par lmghs 9 juin 2021 à 21:41:05

    • Partager sur Facebook
    • Partager sur Twitter
    C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
      9 juin 2021 à 22:10:59

      Oui tu as probablement raison, je ne connais pas c++, je ne suis pas un vrai développeur. Peut-être qu'en ce qui concerne algorea, il y avait une impossibilité technique à utiliser les versions récentes, je ne sais pas comment ils ont fait leur truc.

      Ce que je voulais dire, c'est que le concours s'adressent à des ados dont l'immense majorité ne connait que scratch au collège, puis python au lycée.

      Ce qui m'intéresserait c'est de savoir si il y a une inégalité dans le choix du langage au niveau des temps d'exécution. J'ai donné un algorithme qui marche, avec que du basique, tableaux, boucle, temps de 0.00s sur les 11 premiers, +/- 0.22 seconde sur les 9 derniers avec python. Parmi ceux qui ont tenté en c++, si quelqu'un veut utiliser mon algo et donner les temps d'exécution par le serveur algorea, ça serait intéressant.

      • Partager sur Facebook
      • Partager sur Twitter
        9 juin 2021 à 23:49:27

        Le temps d'exécution de ton algo, pour 30 lignes de code, c'est 0s jusqu'au test 11, et 0.01s du 12 au 20 en C++ sur le serveur algorea.

        En fusionnant les 2 tableaux, je passe à 0.01s à partir du test 12 aussi. Mais bon, c'est tellement faible que c'est difficile de dire ce que vaut la précision. Sans parler que j'emploie les flux du C++ pour lire les données externes. C'est probablement un des points les plus lents de l'algo qui est en O(1)

        Code qui expire dans 24h! http://pastie.org/p/3IUkcaJ4WeLKR66EMfEs4q

        -
        Edité par lmghs 9 juin 2021 à 23:56:15

        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
          10 juin 2021 à 3:50:26

          Merci bien. Bonne journée !
          • Partager sur Facebook
          • Partager sur Twitter
            10 juin 2021 à 17:18:17

            En C :

            #include <stdio.h>
            #include <stdlib.h>
            
            # define MAX(a,b)  ((a) > (b) ? (a) : (b))
            # define MIN(a,b)  ((a) < (b) ? (a) : (b))
            
            int main(void)
            {
                int nb_pos;
                scanf("%d", &nb_pos);
            
                nb_pos++;
                int *tab = calloc(nb_pos, sizeof(int));
            
                int pos;
                scanf("%d", &pos);
            
                for (int i=1; i<nb_pos; i++)
                {
                    int dest;
                    scanf("%d", &dest);
            
                    tab[MIN(dest, pos)]++;
                    tab[MAX(dest, pos)]--;
                    pos=dest;
                }
            
                int max = 0;
                int som = 0;
                for (int i=1; i<nb_pos; i++)
                {
                    som += tab[i];
                    max = MAX(max, som);
                }
            
                printf("%d", max);
            
                free(tab);
                return 0;
            }

            Pour le temps tous les tests sont à 0 s

            -
            Edité par rouloude 10 juin 2021 à 23:14:57

            • Partager sur Facebook
            • Partager sur Twitter

            Passage dans intervalle (Couches de peinture)

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown