•wefgef
|
|
« : 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
|
|
« 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
|
|
« 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
|
|
« 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
Mesaje: 13
|
|
« Răspunde #4 : Martie 21, 2008, 23:41:20 » |
|
Ceva fooarte ciudat... cum se face ca sursa asta : #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--> #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
|
|
|
Memorat
|
|
|
|
•wefgef
|
|
« Răspunde #5 : Martie 22, 2008, 00:07:46 » |
|
Am facut si eu o sursa cu streamuri, am luat tot 40 . 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
|
|
« 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
|
|
« Răspunde #7 : Martie 23, 2008, 14:30:36 » |
|
Mersi Prostule . 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
|
|
« 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
|
|
« 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
|
|
|
Memorat
|
Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
|
|
|
•rEbyTer
|
|
« 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 streamurifără streamuriObserv 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: 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
|
|
« 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
|
|
« Răspunde #12 : Aprilie 04, 2008, 21:32:45 » |
|
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 .
|
|
|
Memorat
|
|
|
|
•SpiderMan
|
|
« 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
|
|
« Ultima modificare: Iulie 16, 2010, 14:14:07 de către Simoiu Robert »
|
Memorat
|
|
|
|
•BigDaddyD
Strain
Karma: -1
Deconectat
Mesaje: 1
|
|
« Răspunde #14 : Septembrie 08, 2010, 03:20:21 » |
|
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
|
|
« 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
|
|
|
•RaduDo2
Strain
Karma: 0
Deconectat
Mesaje: 2
|
|
« 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 imi puteti da o indicatie? ma puteti ajuta va rog? #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
|
|
« 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
Mesaje: 17
|
|
« 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
|
|
« 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
Mesaje: 18
|
|
« 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
|
|
« 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
Mesaje: 1
|
|
« Răspunde #22 : Octombrie 12, 2012, 12:55:35 » |
|
|
|
|
Memorat
|
|
|
|
•tibi2012
Strain
Karma: 0
Deconectat
Mesaje: 2
|
|
« 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. 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
|
|
« Răspunde #24 : Octombrie 22, 2012, 19:02:29 » |
|
In pagina problemei zice clar ca metoda cu scaderi nu intra in timp.
|
|
|
Memorat
|
|
|
|
|