•domino
|
|
« : Decembrie 12, 2005, 00:17:36 » |
|
Aici puteţi discuta despre problema Numere 2.
|
|
|
Memorat
|
|
|
|
•Prostu
|
|
« Răspunde #1 : Decembrie 13, 2005, 00:04:06 » |
|
nu stiu, dar orice fac nu reusesc sa iau peste 75 de puncte la problema asta... am implementat numerele mari in baza 1000000000 si in rest pentru fiecare putere (340-1) fac o cautare binara pentru baza, dar pe testele 1,3,4,6,7 iau TLE...
P.S. numerele mari le-am implementat sub forma de clasa
|
|
|
Memorat
|
|
|
|
•Prostu
|
|
« Răspunde #2 : Decembrie 16, 2005, 21:18:18 » |
|
Puterile sunt intre 1 si 335... luam maxim 90 pct cu for-ul intre 2 si 335... (2^335 are aprox 100 cifre) Am redus la 200, luam ba testul 1 ba testul 6 TLE, ba amandoua... Am redus la 150 si hop... 100 pct...
|
|
|
Memorat
|
|
|
|
•fireatmyself
|
|
« Răspunde #3 : Decembrie 16, 2005, 23:09:54 » |
|
|
|
|
Memorat
|
Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
|
|
|
•pauldb
|
|
« Răspunde #4 : August 14, 2006, 11:09:31 » |
|
Stiu ca e cam tarziu postul meu, dar ce am vazut in acest topic m-a pus pe ganduri. Eu am luat 100 cu o sursa in Pascal care for-ul de la 335 si timpul maxim pe test a fost 0.12s.
|
|
|
Memorat
|
Am zis
|
|
|
•Prostu
|
|
« Răspunde #5 : August 14, 2006, 20:45:12 » |
|
Eu am implementat numerele mari sub forma de clasa, pentru ca este mai usor de lucrat cu ele sub aceasta forma.
O implementare a numerelor mari sub forma de clasa merge in medie de 3-4 ori mai incet decat o implementare cu functii separate pt operatii. Diferenta se datoreaza modului de implementare destul de comod pe care l-am adoptat. Astfel sunt necesare destul de multe duplicari si copierii elementelor operatiilor (atat rezultatul, cat si cel de-al doilea operator, singurul transmis prin pointer este primul operator) ceea ce consuma destul de mult timp. Nu am optimizat pana acum forma in care implementez numere mari, pentru ca, pana acum au fost doar 2 probleme la care sa iau TLE (aceasta si Gard 3). O sa ma gandesc la o implementare mai eficienta a numerelor mari sub forma de clasa. (prima idee ar fi sa nu mai folosesc vectori statici si sa folosesc in schimb clasa vector din std) Daca stie cineva o implementare eficienta a numerelor mari sub forma de clasa, PM sau sa posteze in topic-ul Informatica.
|
|
« Ultima modificare: August 14, 2006, 20:47:42 de către Prostu »
|
Memorat
|
|
|
|
nash_mit
Vizitator
|
|
« Răspunde #6 : August 17, 2006, 23:18:03 » |
|
Da' de ce neaparat folosind OPP ? Daca te uiti la implemtetarea de la "multe smenuri .." o sa iti faci o idee destul de buna ..+ nu e deloc greoi ... ceva bun este psihologia concursurilor de informatica de catalin francu ..... inveti destule din implementarile amintite ...
|
|
|
Memorat
|
|
|
|
•Prostu
|
|
« Răspunde #7 : August 18, 2006, 12:21:45 » |
|
Pentru ca este mult mai usor de lucrat cu numerele mari astfel. Nu pentru ca sunt greu de folosit si implementat sub forma de functii individuale. Daca ai o formula mai complicata scrii direct Mare a, b, c, d; ... Mare rez; rez = ((a + b) * (c - d)) / 5; //si eventual return rez; Apropo, de la ce vine abrevierea OPP . Eu stiam ca in engleza i se spune OOP (Object Oriented Programming) si in romana POO (Programare Orientata pe Obiecte)
|
|
|
Memorat
|
|
|
|
nivan
Vizitator
|
|
« Răspunde #8 : August 18, 2006, 19:37:46 » |
|
dap... OOP = Object Oriented Programming
|
|
|
Memorat
|
|
|
|
•greco
|
|
« Răspunde #9 : August 19, 2006, 03:10:23 » |
|
E mult mai elegant sa faci numerele mari cu clase, si ai mult mai putine griji odata ce ai scris codul pt. ele. Din pacate insa la multe concursuri din Romania (ONI, lot), limitele de timp sunt foarte stranse si nu iti permiti sa faci asa. Mai ales din Romania pt. ca oricum doar in Romania se dau probleme la care trebuie sa folosesti numere mari.
|
|
|
Memorat
|
Jump in the cockpit and start up the engines Remove all the wheelblocks there's no time to waste Gathering speed as we head down the runway Gotta get airborne before it's too late.
|
|
|
•marius135
|
|
« Răspunde #10 : Aprilie 07, 2007, 20:18:48 » |
|
vreau si eu un test cel mai mic daca se poate.... ca la mine pe comp merg teste dar pe evaloator imi da incorect instantaneu lucru ciudat ca mie imi ruleaza cateva secunde.... deci un test(din alea oficiale daca se poate) multumesc anticipat
|
|
|
Memorat
|
|
|
|
•Florian
|
|
« Răspunde #11 : Aprilie 07, 2007, 20:20:57 » |
|
Din ce stiu nu se publica teste oficiale...
|
|
|
Memorat
|
|
|
|
•bogdan2412
|
|
« Răspunde #12 : Martie 21, 2010, 17:49:25 » |
|
Testele de la această problemă conţineau caractere invalide la sfârşitul testelor. Problema a fost reevaluată, însă nu ar trebui să se schimbe niciun scor.
|
|
|
Memorat
|
|
|
|
•Michel
Strain
Karma: 0
Deconectat
Mesaje: 2
|
|
« Răspunde #13 : Aprilie 09, 2012, 17:23:56 » |
|
pe teste mici imi da rsp gresit, la cele mari imi iese din timp, dar la cateva imi da bn, si iau doar 25 de pct, si nu stiu dc, dak aveti vreo idee... uite sursa #include<math.h> #include<fstream> using namespace std; int p,a,b,d; int pr; int main () { ifstream f("numere2.in.txt"); f>>p; a=1; b=p-1; ofstream g("numere2.out.txt"); if(p==0) { g<<'0'; return 0; } if(p==1) { g<<'1'<<'\n'<<'1'; return 0; } else { pr=1; if(p%2==0) pr=0; for(d=3;(d*d)<=p&≺d=d+2) if(p%d==0) pr=0; } if(pr) { g<<p<<'\n'<<'1'; return 0; } if(!pr) do { a++; while(double (pow( double (a), double (b)))>p) b--; if(double(pow(double(a),double(b)))==p) { g<<a<<'\n'<<b<<'\n'; return 0; } }while( double (pow( double (a), double (b)))<=p); return 0; }
Editat de admin: Foloseste tagul code.
|
|
« Ultima modificare: Aprilie 09, 2012, 22:56:27 de către Stefan-Alexandru Filip »
|
Memorat
|
|
|
|
•sYnceD
Strain
Karma: 0
Deconectat
Mesaje: 1
|
|
« Răspunde #14 : Iunie 12, 2014, 18:31:59 » |
|
I-au doar 50 ... primele 10 teste imi da incorect ... restu 10 OK!
|
|
|
Memorat
|
|
|
|
|