Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: 307 Maxsecv  (Citit de 13908 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« : Ianuarie 27, 2007, 18:17:35 »

Aici puteţi discuta despre problema Maxsecv.
« Ultima modificare: Ianuarie 30, 2007, 20:51:26 de către Crestez Dan-Leonard » Memorat
pocaitu
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 141



Vezi Profilul
« Răspunde #1 : Ianuarie 30, 2007, 21:27:51 »

         De ce nu da bine la pb asta daca caut cele mai lungi doua subsecvente de 1 si afisez suma lor ?? Mad
Memorat

This is not a signature ! I repeat, this is not a signature !
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #2 : Ianuarie 30, 2007, 21:34:50 »

Trebuie sa ai grija la cum actualizezi maximele celor doua subsecvente. Daca max1 si max2 sunt cele doua maxime si l lungimea secventei curente, trebuie sa faci cam asa:

Cod:
if (l >= max1) max2 = max1, max1 = l;
else if (l > max2) max2 = l;

Aici s-ar putea sa gresesti.
Memorat
BlackElf
Strain


Karma: 6
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« Răspunde #3 : Februarie 01, 2007, 11:28:04 »

exact ideea asta am folosit si eu... singura problema e ca la primele 6 imi da OK dar apoi... TLE...

sincer nu am habar cum ar putea fi mai rapid Neutral

idei? Very Happy
Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #4 : Februarie 01, 2007, 11:48:10 »

incearca direct din citire...fara sa folosesti alte siruri ... altceva nu vad sa fie
spor  Thumb up
Memorat

vid...
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #5 : Februarie 01, 2007, 13:40:40 »

exact ideea asta am folosit si eu... singura problema e ca la primele 6 imi da OK dar apoi... TLE...

sincer nu am habar cum ar putea fi mai rapid Neutral

idei? Very Happy

Ce complexitate ai la program ?
Merge de 100 si daca nu faci direct din citire.Idee este sa ai neaparat complexitate liniara.  Think

 Thumb up
« Ultima modificare: Februarie 01, 2007, 13:46:36 de către Tabara Mihai » Memorat
BlackElf
Strain


Karma: 6
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« Răspunde #6 : Februarie 01, 2007, 13:45:03 »

Da, am incercat sa fac o data cu citirea. De fapt... uite sursa:

Cod:
#include <iostream.h>
#include <fstream.h>

ifstream in ("maxsecv.in");
ofstream out ("maxsecv.out");

int main ()
{
int max1=0,max2=0,N,*a;
register int i,k=0;

a=new int [1000000];

in>>N;
for (i=0;i<N;i++)
 {
 in>>a[i];
 if (!a[i])
   k=0;
  else
   k++;
 if (k>max1)
  max1=k;
 else
  if (k>max2)
   max2=k;
 }

out<<max1+max2;

delete [] a;
return 0;
}

Poate imi scapa ceva... oricum de corect e corect ... 6/10 Smile
Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #7 : Februarie 01, 2007, 13:48:32 »

Da, am incercat sa fac o data cu citirea. De fapt... uite sursa:

Cod:
#include <iostream.h>
#include <fstream.h>

ifstream in ("maxsecv.in");
ofstream out ("maxsecv.out");

int main ()
{
int max1=0,max2=0,N,*a;
register int i,k=0;

a=new int [1000000];

in>>N;
for (i=0;i<N;i++)
 {
 in>>a[i];
 if (!a[i])
   k=0;
  else
   k++;
 if (k>max1)
  max1=k;
 else
  if (k>max2)
   max2=k;
 }

out<<max1+max2;

delete [] a;
return 0;
}

Poate imi scapa ceva... oricum de corect e corect ... 6/10 Smile
Incearca sa faci fara alocare dinamica.  Thumb up
Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #8 : Februarie 01, 2007, 13:50:46 »

nu ai nevoie de sirul ala. se poate usor si fara. Citeste mai bine o variabila de n ori
Memorat

vid...
BlackElf
Strain


Karma: 6
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« Răspunde #9 : Februarie 01, 2007, 13:57:35 »

nu ai nevoie de sirul ala. se poate usor si fara. Citeste mai bine o variabila de n ori

Doamne... frate... de ce m-am complicat?

Mda... no comment Smile

Edit: tot 6/10... 0_O la 10-20 ms... fara vector si fara alocare dinamica.
« Ultima modificare: Februarie 01, 2007, 14:01:48 de către Spulber Iosif » Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #10 : Februarie 01, 2007, 14:02:10 »

nu ai nevoie de sirul ala. se poate usor si fara. Citeste mai bine o variabila de n ori

Doamne... frate... de ce m-am complicat?

Mda... no comment Smile

Edit: tot 6/10... 0_O la 10-20 ms... fara vector si fara alocare dinamica.

Schimba atunci citirea.Fa-o in C.
Memorat
astronomy
Nu mai tace
*****

Karma: 204
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #11 : Februarie 01, 2007, 15:47:53 »

Faza e ca programul tau e gresit, nu ai fost atent la ce zis filipb intr-un post mai sus.
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #12 : Februarie 01, 2007, 16:04:35 »

Cod:

 if (k>max1)
  max1=k;
 else
  if (k>max2)
   max2=k;
secventa asta e gresita
vezi asa
Cod:
if (k>max1) {max2=max1;max1=k;}
   else (if k>max2) max2=k;
Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #13 : Februarie 01, 2007, 18:33:25 »

Faza e ca programul tau e gresit, nu ai fost atent la ce zis filipb intr-un post mai sus.

El intrebase cum sa evite TLE-ul.  Confused
Daca isi rezolva faza cu tle-ul o sa ia maxim 90 de puncte. ( Si eu am gresit acolo  Aha )
( M-am cam mirat si eu ca a luat 60 cu codul ala  Think ).
Memorat
marius21
Strain
*

Karma: -20
Deconectat Deconectat

Mesaje: 27



Vezi Profilul
« Răspunde #14 : Februarie 07, 2007, 10:14:28 »

faci comparatia numai cand ai un 0 si k-ul<>0 (adica cand iesi dentr-o secventa de 1-uri :1 1 1 0 0
Mie imi da
Memorat
jdv
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 34



Vezi Profilul
« Răspunde #15 : Februarie 14, 2007, 21:38:09 »

Ati putea pune cateva teste pe forum?

Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #16 : Februarie 14, 2007, 21:39:32 »

testele oficiale nu se fac publice. Daca vrei sa iti testezi programu incearca :

1 0 0 1 1 1 0 0 0 1 1

raspunsu e 5.
Memorat
jdv
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 34



Vezi Profilul
« Răspunde #17 : Februarie 14, 2007, 21:56:17 »

Intr-adevar e 5...si programul merge bine...

Nu ma asteptam la testele oficiale...ci doar niste exemple...( poate imi scapa ceva )
Memorat
astronomy
Nu mai tace
*****

Karma: 204
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #18 : Februarie 14, 2007, 22:03:58 »

Poate pierzi ceva caz particular gen: 000 sau 100
Daca nu, fa un program in complexitate mare dar care furnizeaza sigur raspunsul corect, genereaza teste aleatoare si cand gasesti unul pe care programul tau da raspuns diferit baga un debug. Thumb up
Memorat
jdv
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 34



Vezi Profilul
« Răspunde #19 : Februarie 14, 2007, 22:07:43 »

Pe testele care le-am incercat am obtinut raspunsuri bune...

Oare unde e greseala? Think

A mai patit cineva asa...? Neutral

Nu am pierdut cazurile elementare...

Si nu reusesc sa gasesc nici greseala...

[Editat de moderator: NU mai posta de 3 ori consecutiv]
« Ultima modificare: Februarie 15, 2007, 18:32:10 de către Bogdan Tataroiu » Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #20 : Februarie 14, 2007, 22:56:07 »

umpic de cod nu ar strica Tongue sau nush explica ce faci exact...altfel nu imi dau seama  wink
Memorat

vid...
jdv
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 34



Vezi Profilul
« Răspunde #21 : Februarie 15, 2007, 17:40:18 »

Cod:
max1:=0;  max2:=0;
    assign(f,'maxsecv.in');  reset(f);
      readln(f,n);
    while not eof(f) do begin
         read(f,n1);
        while n1='0' do read(f,n1);
                       k:=0;
                     while n1='1' do begin
                              inc(k);
                            read(f,n1);
                                      end;
     if k>=max1 then begin
            max2:=max1;
            max1:=k;
                            end
             else if k>max2 then max2:=k;
                       end;
        close(f);

Caut cele mai lungi 2 secv de 1 din citire direct...

Secventa aceasta de cod imi gaseste cele doua maxime... Think
« Ultima modificare: Februarie 15, 2007, 17:43:19 de către Jecan Daniel Valerian » Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #22 : Februarie 15, 2007, 18:16:50 »

25
1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1

raspunsul corect : 5
Memorat

vid...
jdv
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 34



Vezi Profilul
« Răspunde #23 : Februarie 15, 2007, 21:25:42 »

Am verificat testul asta si imi da rezultat corect...
Si toate testele care le-am verificat imi dau rezultat corect...
Nu are cineva vreo idee...? E vreo eroare in cod, sau care e problema aici?

La evaluator primesc incorect la toate testele...unde sa fie greseala? sad

« Ultima modificare: Februarie 15, 2007, 23:58:14 de către Jecan Daniel Valerian » Memorat
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #24 : Februarie 16, 2007, 00:27:59 »

Nu prea inteleg ce faci tu pe-acolo si cum ti-a mers pe exemplu din enunt sau pe exemplul de mai sus.

Din cate vad eu acolo n1 e de tip caracter (compari n1='0'). Si tu citest read(f,n1). In fisier intre cifre se afla si spatii pe care tu le citesti tot in acel n1. Deci tu mereu gasesti cea mai lunga secventa de 1 ca fiind de lungime 1(datorita spatiilor). Esti sigur ca nu ai raspuns 2 pe toate testele ? Smile
Ah si inca ceva nu ar trebui sa verifici in interiorul fiecarui while chestia cu eof ?
Memorat
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines