begin process at 2010 02 10 13:38:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > [PROLOGIN] QCM N° 5

[PROLOGIN] QCM N° 5


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :22/12/2003 Date de mise à jour :27/12/2003 13:48:35 Vu :3 519

Auteur : RaZoR

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

C'est un algorithme qui permet de trouver le nombre de zéros du plus grand sous-tableau donné en entrée... (voir www.prologin.org pour plus d'information) !

Source

  • #include <iostream>
  • using namespace std;
  • int tableau[1024][1024];
  • int bigRect(int l, int c)
  • {
  • int x = 0, y, i, j;
  • i = c + 1; j = 1; l++;
  • do{
  • i--;
  • if(tableau[i][j]==1)x = 0;
  • else x++;
  • tableau[i][j] = x;
  • if(i == 1){x = 0; j++; i = c + 1;}
  • }while(j <= l);
  • l--;
  • //Il ne me reste que 4 secondes !
  • int q, s, d, f, res;
  • int max = tableau[1][1];
  • for(q = 1; q < l; q++)
  • {
  • for(s = 1; s < c; s++)
  • {
  • if(q > 1 && tableau[s][q-1] >= tableau[s][q])
  • {
  • if(tableau[s][q]+s-1 == c)s = c - 1;
  • else s += tableau[s][q];
  • goto suite;
  • }
  • if(tableau[s][q] > 1)
  • {
  • for(d = tableau[s][q]; d > 1; d--)
  • {
  • for(f = q; f <= l; f++)
  • {
  • if(tableau[s][f] >= d){if((res=d*(f-q+1)) > max)max = res;}
  • else if(tableau[s][f] < 2 ||(f == l && tableau[s][q]+s-1 == c))goto suite;
  • else break;
  • }
  • }
  • }
  • suite:;
  • }
  • }
  • return max;
  • }
  • int main()
  • {
  • int l, c, L, C;
  • cin >> l >> c;
  • for(L = 1; L <= l; L++)
  • for(C = 1; C <= c; C++)
  • cin >> tableau[C][L];
  • cout << bigRect(l, c);
  • return 0;
  • }
#include <iostream>
using namespace std;

int tableau[1024][1024];

int bigRect(int l, int c)
{
  int x = 0, y, i, j;
  i = c + 1; j = 1; l++;
  do{
     i--;
     if(tableau[i][j]==1)x = 0;
     else x++;
     tableau[i][j] = x;
     if(i == 1){x = 0; j++; i = c + 1;}
  }while(j <= l);
  l--;
  //Il ne  me reste que 4 secondes !
  int q, s, d, f, res;
  int max = tableau[1][1];
  for(q = 1; q < l; q++)
  {
     for(s = 1; s < c; s++)
     {
        if(q  > 1 && tableau[s][q-1] >= tableau[s][q])
        {
           if(tableau[s][q]+s-1 == c)s = c - 1;
           else s += tableau[s][q];
           goto suite;
        }
        if(tableau[s][q] > 1)
        {
           for(d = tableau[s][q]; d > 1; d--)
           {
              for(f = q; f <= l; f++)
              {
                 if(tableau[s][f] >= d){if((res=d*(f-q+1)) > max)max = res;}
                 else if(tableau[s][f] < 2 ||(f == l && tableau[s][q]+s-1 == c))goto suite;
                 else break;
              }
           }
        }
suite:;
     }
  }
  return max;
}

int main()
{
  int l, c, L, C;
  cin >> l >> c;
  for(L = 1; L <= l; L++)
     for(C = 1; C <= c; C++)
        cin >> tableau[C][L];
  cout << bigRect(l, c);
  return 0;
}

 Conclusion

Malheureusement cette source est trop lente pour passer les 10 tests...
Si vous trouvez plus rapide, je vous en serais reconnaissant de me faire parvenir votre idée !!

Merci


 Sources du même auteur

EXEMPLE DE CRYPTAGE !!!!
PETIT EFFET DE TEXTE
Source avec Zip PETIT HORLOGE DIGITALE
AFFICHER UNE MESSAGBOX !!!
FAUX FORMATAGE !!! PAS MECHANT !!!

 Sources de la même categorie

Source avec Zip OPERATION SUR LES MATRICES CARREES AVEC CLASSE GENERIQUE par chouhad
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
[DEV-C++] CALCUL DE LA RACINE CARRÉE D'UN RÉEL par Jhep
PROGRAMME QUI CALCUL LE PPCM ET LE PGCD par AnoSantino
EVALUER UNE EXPRESSION MATHÉMATIQUE par begueradj

Commentaires et avis

Commentaire de Thaeron le 22/12/2003 11:29:19

J'ai également fais les algo pour prologin (malheureusement je ne passe que 8 tests sur 10) et je ne trouve pas tres correct de ta part de donner ton source avant la fin de l'inscription (1° janvier 2004 je crois).

Commentaire de BruNews le 22/12/2003 11:35:00 administrateur CS

2 appels de fonction dans une triple boucle, mortel pour les performances, faut faire en interne.
Vire aussi les indexations et travaille avec des pointeurs.

Commentaire de RaZoR le 22/12/2003 11:52:35

Thearon =&gt;  Je suis désolés de l'avoir posté si tôt mais je ne pense pas qu'elle ne serve-t-à grand chose, car elle ne passe que 6 tests sur 10 !!

BruNews =&gt; Qu'est ce que vous voulez dire par : "travailles avec des pointeurs" ?? Je m'en sert comment et pour quoi ??

Merci

Commentaire de TheSaib le 23/12/2003 15:11:19 administrateur CS

si tu connais pas les pointeurs la suite  va être difficile pour toi.

va sur commentcamarche.net ou www.developpez.com dans la rubriques cours , et brieffe toi rapidement sur le comment du pourquoi des pointeurs , ca te sera fort utile pour la suite du prologin !

Commentaire de cooleric le 30/12/2003 20:35:17

Alle encore un petit effort a tous les participants du futur prologin! Travaillez vos algos ca vaut le coup, l'ambiance de la finale est terrible. malheureusment cette annee ca va etre impossible pour moi a cause des concours d'ecoles et apres je serais trop vieux.
Sinon pour trouver des idees je pense que tu vas devoir reflechir seul car ca serait un peu injuste envers les autres candidats sinon (ceci dit pour les questionnaires a la maison il est dur de verifier si le candidat a travailler seul mais ca se voit vite avec les epreuves de demi-finale)

Bonne chance!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales