infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Andrei Grigorean din Martie 09, 2010, 13:33:39



Titlul: 986 Numar4
Scris de: Andrei Grigorean din Martie 09, 2010, 13:33:39
Aici puteti discuta despre problema Numar4 (http://infoarena.ro/problema/numar4).


Titlul: Răspuns: 986 Numar4
Scris de: Vlad Tarniceru din Martie 09, 2010, 21:15:18
am facut-o  :D .ideea este simpla,avand in vedere ca nr de jos este format doar din 1 si 0(de fapt e sub forma 1*(10^n)),va trebui sa impartim doar la 2 si 5,deci vom folosi un algoritm de impartire pt numere mari  :D :winner1:


Titlul: Răspuns: 986 Numar4
Scris de: Simoiu Robert din Martie 10, 2010, 09:20:12
Nu mai da idei alta data ....  :eyebrow:


Titlul: Răspuns: 986 Numar4
Scris de: Finaru Andrei Emanuel din Martie 10, 2010, 15:28:51
Am si eu o observatie: nu cumva la:
Citat
Date de ieşire: fişierul numar.out va conţine:
ar trebui "numar4.out"? Ca bietul elev roman care a fost la OJI si a retinut titlul de acolo se poate incurca.(am luat 0 pct la primul upload pe fisier de iesire lipsa)


Titlul: Răspuns: 986 Numar4
Scris de: Andrei Grigorean din Martie 10, 2010, 16:17:28
Am modificat.


Titlul: Răspuns: 986 Numar4
Scris de: Milut Petronela din August 30, 2010, 12:18:32
am citit solutia oficiala..de ce b-ul e format numai din 1 si 0? spre ex, q=4.23872679, a=1598, b=377. daca e numai 1 si 0, atunci ar fi a=423872679, b=100000000. diferenta e mai mare...


Titlul: Răspuns: 986 Numar4
Scris de: Simoiu Robert din August 30, 2010, 12:35:00
Fii atenta : daca ai sa zicem primul exemplu, noi vrem de fapt sa scriem acel numar sub forma de fractie, si sa-l simplificam pana nu se mai poate. Dupa cum ai invatat in gimnaziu la matematica transformarile , spre exemplu daca avem un numar rational 0,5 , el poate fi scris sub forma de fractie asa : 5 / 10 = 1 / 2 ; alte exemple : 0, (5) = 5/9 ; 0 , 1(5) = ( 15 - 1 ) / 90 = 14 / 90 = 7 / 45 . Noi avem in primul exemplu q = 0, 375, adica 375 / 1000. Daca o sa tot simplifici, o sa ajungi la 5 / 8. La al doilea exemplu avem q = 12,34567, adica 12 intregi si 34567 / 100000. Numaratorul o sa fie dupa introducerea intregilor in fractie : 12 * 100000 + 34567 = 1234567, si fractia q = 1234567 / 100000. Aceasta nu mai poate fi simplificata, deci acesta este rezultatul.


Titlul: Răspuns: 986 Numar4
Scris de: Iorga Andreea din Mai 18, 2011, 09:51:10
q poate fi si fractie periodica?:)


Titlul: Răspuns: 986 Numar4
Scris de: cont cu nume gresit sau fals din Mai 18, 2011, 10:06:58
din cate am inteles eu, nu (nu se precizeaza cum citesti perioada). :D
oricum eu am rezolvat-o doar pentru fractii neperiodice


Titlul: Răspuns: 986 Numar4
Scris de: FMI Razvan Birisan din Iulie 28, 2012, 18:03:03
Iua 95 p   :shock: TLE pe testul 18.

Fac simplificări cu 10,5,2.Nu știu cum aș mai putea să optimizez programul.
Vă rog , ar putea cineva să mă ajute ?





Titlul: Răspuns: 986 Numar4
Scris de: Dan H Alexandru din Iulie 29, 2012, 13:33:35
Probabil ca operatiile nu sunt optime.

Incearca la impartire ceva de genul:
Cod:

void div(int A[],int Size, int B)
{
      int i, t = 0;
      for (i = Size; i > 0; i--, t %= B)
              A[i] = (t = t * 10 + A[i]) / B;
      for (; Size > 1 && !A[ Size ]; Size--);
}


Vezi sa simplifici in ordinea 10 , 5 , 2 si la impartirea cu 10 doar sa tai 0-uri.
Daca nu e asta vezi sa nu faci acelasi lucru de mai multe ori si daca lucrezi cu stringuri nu uita ca operatii gen strlen(s) au complexitate O(N).


Titlul: Răspuns: 986 Numar4
Scris de: FMI Razvan Birisan din Iulie 30, 2012, 09:31:16

Am încercat să tai doar zero-urile ,dar tot 95 de puncte iau.
Ți - am trimis un PM cu sursa , dacă poți să-mi spui și mie ce e greșit.
Mulțumesc pentru ajutor  :ok:


Titlul: Răspuns: 986 Numar4
Scris de: Dan H Alexandru din Iulie 30, 2012, 11:09:38
Hmm... Nu cred ca problema este de la sursa ta , ci timpul a fost scazut prea mult. Cu sursa veche care lua 100 iau , la fel ca tine , 95p.
Sursa mea veche facea 120ms pe testul 18 , iau acum apare depasit , desi sursa e aceeasi.

Cred ca limita de timp a fost schimbata si nu s-a updatat in enunt. Totusi eu cred ca limita ar putea fi marita putin. ( la 0.2 / 0.175 ) :ok:


Titlul: Răspuns: 986 Numar4
Scris de: FMI Razvan Birisan din Iulie 30, 2012, 11:25:18

Ce putem face ? :?


Titlul: Răspuns: 986 Numar4
Scris de: Stefan Eniceicu din Iulie 30, 2012, 11:47:08
Mi-am batut un pic capul, am scos toate apelurile de functii si am facut impartirile la 2 pe biti si a intrat. Incercati asa...

Ideea e ca pierzi destul de mult timp atunci cand ai o functie de genu:

Cod:
int F (int v[])
{
    .........
}


Titlul: Răspuns: 986 Numar4
Scris de: Dan H Alexandru din Iulie 30, 2012, 12:24:55
10x.  :ok:


Titlul: Răspuns: 986 Numar4
Scris de: FMI Razvan Birisan din Iulie 30, 2012, 18:06:50
Mission Accomplished :thumbup:


Titlul: Răspuns: 986 Numar4
Scris de: Bogdan Beldea din Decembrie 01, 2012, 00:46:40
O rezolvare standard ia pe testul 18 in jur de 210 milisecunde.
Cum se face impartirea la 2 pe biti?


Titlul: Răspuns: 986 Numar4
Scris de: Visan Radu din Decembrie 01, 2012, 07:06:06
X % 2 e echivalent cu X & 1.


Titlul: Răspuns: 986 Numar4
Scris de: UAIC.VlasCatalin din Decembrie 02, 2012, 11:44:48
Eu am facut doua proceduri aparte pentru impartirea la 5 si la 2 fara operatii pe biti si a mers destul de bine http://infoarena.ro/job_detail/827557
Am declarat procedurile cu inline si fara parametri locali: inline void imparte();
Hope it helps  :)