Pagini: [1] 2 3   În jos
  Imprimă  
Ajutor Subiect: 000 Algoritmul lui Euclid  (Citit de 47507 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : Februarie 26, 2008, 11:06:29 »

Aici puteti discuta despre problema Algoritmul lui Euclid.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #1 : Martie 04, 2008, 15:26:11 »

Din pacate ia 100 de puncte si o solutie in O(sqrt(A)).
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #2 : Martie 04, 2008, 18:29:33 »

Cel mai bine era sa se dea mai multe teste in fisier. (ca la euclid3)
Memorat
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #3 : Martie 10, 2008, 16:13:58 »

Datorita ineficientei testelor, la aceasta problema s-au schimbat atat enuntul, cat si testele folosite pentru evaluare. In consecinta, s-a facut o reevaluare a tuturor surselor trimise pana in prezent. Ne cerem scuze pentru eventualele neplaceri.
Memorat
BigMazilu
Strain


Karma: -32
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #4 : Martie 21, 2008, 23:41:20 »

Ceva fooarte ciudat...  cum se face ca sursa asta :
Citat
#include <stdio.h>   
 
int T, A, B;   
 
int gcd(int a, int b)   
{   
    if (!b) return a;   
    return gcd(b, a % b);   
}   
 
int main(void)   
{   
    freopen("euclid2.in", "r", stdin);   
    freopen("euclid2.out", "w", stdout);   
 
    scanf("%d", &T);   
    for (; T; --T)   
    {   
        scanf("%d %d", &A, &B);   
        printf("%d\n", gcd(A, B));   
    }           
 
    return 0;   

     - care este a lui Buruiana Filip, ia 100 de puncte, pe cand sursa mea-->
Citat
#include<iostream.h>   
#include<fstream.h>   
 
int t,a,b;   
 
  int cmmdc(int a, int b)   
  {   
       if(!b) return a;   
       return cmmdc(b,a%b);   
  }   
 
 
  int main()   
 {   
  ifstream f("euclid2.in");   
  ofstream g("euclid2.out");   
 f>>t;   
 for(t;t;--t)   
  {f>>a>>b;   
  g<<cmmdc(a,b)<<endl;   
  }   
  return (0);   
  } 
- care este absolut identic cu a lui Buruiana, ia numai 40 de puncte, dandu-mi TLE pe ultimele teste Huh
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #5 : Martie 22, 2008, 00:07:46 »

Am facut si eu o sursa cu streamuri, am luat tot 40 Smile. Nu e vina ta, se pare ca merg stremurile prea prost.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Prostu
Nu mai tace
*****

Karma: 134
Deconectat Deconectat

Mesaje: 323



Vezi Profilul
« Răspunde #6 : Martie 23, 2008, 14:09:22 »

Din contra, streamurile merg mai repede. Lui victor ii ia foarte mult afisarea pentru ca foloseste 'endl'. Acesta din urma goleste bufferul dupa fiecare numar afisat. In locul lui ar trebui folosit '\n'. Lui wefgef cred ca ii merge incet pentru ca foloseste obiectele 'cin' si 'cout', care probabil nu sunt optimizate pentru citirea si respectiv scrierea in fisiere (posibil sa aibe un buffer mai mic sau deloc).
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #7 : Martie 23, 2008, 14:30:36 »

Mersi Prostule Smile. O sa incerc din nou, sa vad cum merge.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #8 : Aprilie 04, 2008, 17:58:31 »

La nationala pot folosi streamuri (in sensul efectivităţii).. adică ce e mai rapid .. un freopen sau un stream ?
Memorat
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #9 : Aprilie 04, 2008, 18:12:35 »

poti sa folosesti. teoretic merge mai repede cu streamuri.

Din contra, streamurile merg mai repede. Lui victor ii ia foarte mult afisarea pentru ca foloseste 'endl'. Acesta din urma goleste bufferul dupa fiecare numar afisat. In locul lui ar trebui folosit '\n'. Lui wefgef cred ca ii merge incet pentru ca foloseste obiectele 'cin' si 'cout', care probabil nu sunt optimizate pentru citirea si respectiv scrierea in fisiere (posibil sa aibe un buffer mai mic sau deloc).

uite-te peste sursele de care vorbeste Filip ca sa te lamuresti Smile
Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #10 : Aprilie 04, 2008, 18:21:39 »

Păi, ca să mă asigur ,am făcut aceiaşi problemă atât cu streamuri , cât şi cu citirea standard din C.

cu streamuri
fără streamuri

Observ că la citirea standard este folosită mult mai puţina memorie.. (diferenţă de peste 100KB faţă de citirea cu streamuri) , ar trebui să mă îngrijoreze asta la unul dintre subiectele de la naţională?


L.E.: îmi place citirea standard din C , la faza:
Cod:
char c;
while(scanf("%c",&c)!=EOF)
   { fă-ţi treaba }
« Ultima modificare: Aprilie 04, 2008, 18:27:28 de către lezr rEbyTer » Memorat
tvlad
De-al casei
***

Karma: 63
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #11 : Aprilie 04, 2008, 20:46:57 »

La nationala pot folosi streamuri (in sensul efectivităţii).. adică ce e mai rapid .. un freopen sau un stream ?
In sensul efectivitatii streamurile sunt mai dubioase, compilatorul le aduce dintr-un univers paralel si asta dureaza mult timp.
Ai aici un experiment legat de efectivitate, in caz ca vrei sa studiezi mai indeaproape subiectul.

PS: Pe versiuni de gcc mai vechi parca mergeau mai incet streamurile, nu?
Memorat
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #12 : Aprilie 04, 2008, 21:32:45 »

Citat
PS: Pe versiuni de gcc mai vechi parca mergeau mai incet streamurile, nu?

Da.

Este prea efectiv sa folosesc cuvantul "efectiv" . Vroiam să spun eficient . Dar doar vroiam d'oh! .
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #13 : Aprilie 02, 2010, 18:23:39 »

Imi explica si mie de ce la problema alg. lui euclid, la comentarii este link catre alg. lui euclid extins ? Merci.
[LE] Vad ca s-a rezolvat. Good job  Ok
« Ultima modificare: Iulie 16, 2010, 14:14:07 de către Simoiu Robert » Memorat
BigDaddyD
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #14 : Septembrie 08, 2010, 03:20:21 »

Citat
Pentru a imbunatati timpul de rulare putem folosi algoritmul lui Euclid prin scaderi, ceea ce duce la obtinerea a 60 de puncte

cum se face ca am luat 100 cu euclid?
nu ca m-ar deranja
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #15 : Septembrie 08, 2010, 05:40:38 »

Pentru ca ai implementat prin impartiri. Citeste si tu ce citezi si apoi posteaza.
Memorat

Am zis Mr. Green
RaduDo2
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #16 : Decembrie 03, 2010, 20:23:48 »

nu inteleg de ce iau punctaj atat de mic ... nu pot sa pricep ... am modificat sursa de cateva ori dar degeaba Neutral imi puteti da o indicatie? ma puteti ajuta va rog?

Cod:
#include<iostream.h>
#include<fstream.h>
int t,i,a,r,b;
int main()
{
fstream f("euclid2.in",ios::in);
fstream g("euclid2.out",ios::out);
f>>t;
if(t<=100000&&t>=1)
for(i=1;i<=t;i++)
{
f>>a>>b;
while(b!=0){
r=a%b;
a=b;
b=r;}
g<<a<<endl;
}
f.close();g.close();
return 0;
}

Editat de admin: Foloseste tagul "code" cand postezi surse.
« Ultima modificare: Decembrie 06, 2010, 11:44:38 de către Andrei Grigorean » Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #17 : Decembrie 03, 2010, 20:38:39 »

De la endl ti se trage. Inlocuieste-l cu "\n".
Memorat
Cosmin1490
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #18 : Decembrie 06, 2010, 03:02:30 »

Eu zic asa:
-Schimba <fstream.h> in <fstream> si scrie dupa using namespace std;.
-Declara variabilele tale ca fiind locale si nu globale.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #19 : Decembrie 06, 2010, 08:36:20 »

Eu zic asa:
-Schimba <fstream.h> in <fstream> si scrie dupa using namespace std;.
-Declara variabilele tale ca fiind locale si nu globale.


N-are nicio legatura ca a inclus "fstream.h" in loc de "fstream", pe infoarena e gcc 4.2. Abia din 4.3 e "fstream.h" deprecated. Iar legat de variabile, crede-ma ca n-are nicio importanta daca sunt locale sau globale, la cate are. Compilatorul isi face oricum niste optimizari.

Problema e de la endl. Endl goleste buffer-ul de scriere de fiecare data, pe cand afisarea "\n" nu. E ca si cum ai face fflush de fiecare data.
Memorat
DevilShadow
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #20 : Februarie 27, 2011, 21:02:38 »

Imi poate zice si mie ce ii gresit la codul asta?

int cmmdc(int a, int b)
{
   if(!b) return a;
   return cmmdc(b, a % b);
}

Iar apelul e aici.
   f >> n;
   for(i = 0; i < n; i ++)
   {
      f >> a >> b;
      g << cmmdc(a, b) << endl;
   }
Imi da doar 30 de pc... si zice ca am depasit timpul. De ce?
Memorat
andunhill
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« Răspunde #21 : Februarie 27, 2011, 21:09:05 »

Incearca sa inlocuiesti endl cu '\n'. Citeste mai sus de ce nu e indicat endl.
Memorat
Petrean_Vlad
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #22 : Octombrie 12, 2012, 12:55:35 »

E prea smecher tipul asta Yahoo! Yahoo! Rolling on the Floor Laughing
Memorat
tibi2012
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
TLE
« Răspunde #23 : Octombrie 22, 2012, 18:34:56 »

Imi ziceti si mie cum as putea optimiza programul cami da TLE pe ultimele 2 teste.

Cod:
var f,g:text;
    a,b,t,i:longint;
    v1,v2:array[1..1000] of longint;
begin
  assign(f,'euclid2.in');
  assign(g,'euclid2.out');
  settextbuf(f,v1);
  settextbuf(g,v2);
  reset(f);
  rewrite(g);
  readln(f,t);
  for i:=1 to t do
    begin
      readln(f,a,b);
      while a<>b do
        if a>b then
          dec(a,b)
        else
          dec(b,a);
      writeln(g,a);
    end;
  close(f);
  close(g);
end.
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #24 : Octombrie 22, 2012, 19:02:29 »

In pagina problemei zice clar ca metoda cu scaderi nu intra in timp.
Memorat
Pagini: [1] 2 3   În sus
  Imprimă  
 
Schimbă forumul:  

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