Pagini: 1 [2]   În jos
  Imprimă  
Ajutor Subiect: Buguri la concursurile de programare si nu numai  (Citit de 12485 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
QSilver
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #25 : Martie 19, 2012, 14:44:48 »

Am avut si eu probleme la OJI 2011 tot cu int in loc de short si -100 de puncte.
Memorat
andunhill
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« Răspunde #26 : Martie 22, 2012, 08:21:41 »

Cel mai enervant bug: for(i = N; i >= 1; i++d'oh!.
Memorat
swim406
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 9



Vezi Profilul
« Răspunde #27 : Martie 23, 2012, 12:33:21 »

din instinct am dat un ctrl+s , insa nu am observat ca de fapt apasasem s + ctrl + s , si astfel am salvat sursa cu un s in plus. Asta a facut diferenta de la 80 la  0 puncte Smile).

De asta nu m-am calificat eu anul trecut la ONI. Am zis că nu mai apăs ctrl+s în veci la concursuri. Smile)
Memorat
a_h1926
Echipa infoarena
Nu mai tace
*****

Karma: 317
Deconectat Deconectat

Mesaje: 385



Vezi Profilul
« Răspunde #28 : Aprilie 03, 2012, 12:31:56 »

Aveti grija cu numele constantelor, eu am pierdut 80 de puncte la o problema chiar acum la ONI pentru ca in loc sa declar un arbore de intervale AInt[3*XMax] l-am declarat AInt[3*NMax], unde XMax era 100005 si NMax era 805   Brick wall
In acest fel, in loc sa fiu pe locul 6, am ajuns pe 14, asa ca fiti foarte atenti la lucruri de genul acesta, pot costa foarte scump.
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #29 : Aprilie 03, 2012, 12:56:02 »

Int in loc de long long. Depasirea poate fi mare iar numarul sa fie pozitiv iar rezultatul sa para bun Smile)
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #30 : Aprilie 11, 2012, 20:47:32 »

Grija mare tot la long long cand faceti descompuneri. Codul urmator cicleaza cand incerc sa descompun un numar prim foarte mare:
http://community.topcoder.com/stat?c=problem_solution&rm=312577&rd=14732&pm=11135&cr=22895893

Am pierdut niste bani din cauza asta  Brick wall
Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #31 : Aprilie 11, 2012, 21:01:35 »

Tot int in loc de long long  Very Happy La variabila i
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #32 : Aprilie 11, 2012, 21:03:12 »

Tot int in loc de long long  Very Happy La variabila i

N-ar fi afectat daca faceam descompunerea cum trebuie Smile
Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #33 : Aprilie 11, 2012, 21:38:13 »

Ce nu inteleg e de ce te zgarcesti la o variabila? Crezi ca faci economie? De regula, intr-o problema in care e necesar sa am o variabila long long, le fac toate long long, ca sa ma asigur ca nu am probleme legate de domeniul de valori al variabilei. Exceptie fac sirurile care pot duce la "Limita de memorie depasita". Acolo, intai fac un calcul sa vad daca imi ajunge memoria, si daca nu imi ajunge sau daca cred ca daca folosesc mai putina memorie imi va imbunatati sesizabil viteza de executie a programului (adica daca imi cresc sansele sa prind teste in plus), atunci folosesc int (bineinteles doar daca valorile incap pe int), iar mai apoi urmaresc cu atentie toate locurile in care folosesc sirul respectiv ca sa nu am probleme. In general, cu cat e mai simplu codul, cu atat mai bine. Nu are rost sa te complici pentru cativa bytes in plus sau in minus.

P.S.: Cum faceai descompunerea "ca sa fie bine"?
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #34 : Aprilie 11, 2012, 21:56:26 »

Deseori te omoara timpul rau de tot daca faci toate operatiile pe long long  Smile.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #35 : Aprilie 11, 2012, 22:06:58 »

Grija mare tot la long long cand faceti descompuneri. Codul urmator cicleaza cand incerc sa descompun un numar prim foarte mare:
http://community.topcoder.com/stat?c=problem_solution&rm=312577&rd=14732&pm=11135&cr=22895893

Am pierdut niste bani din cauza asta  Brick wall

O alta greseala comuna si inrudita e la ciurului lui Eratostene:

Cod:
for (int i = 2; i <= n; ++i) {
   if (prime[i]) {
     for (long long j = (long long) i*i; j <= n; j += i) {
       prime[j] = 0;
   }
}

Daca nu pui acolo long long pentru n = 65 000 deja programul cicleaza. Ma rog, mai exista si alte moduri elegante de a evita asta (gen i*i <= n), dar am vazut ca lumea tinde sa faca asa. Fiti atenti.
Memorat

Am zis Mr. Green
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #36 : Aprilie 11, 2012, 22:19:32 »

Ce nu inteleg e de ce te zgarcesti la o variabila? Crezi ca faci economie? De regula, intr-o problema in care e necesar sa am o variabila long long, le fac toate long long, ca sa ma asigur ca nu am probleme legate de domeniul de valori al variabilei. Exceptie fac sirurile care pot duce la "Limita de memorie depasita". Acolo, intai fac un calcul sa vad daca imi ajunge memoria, si daca nu imi ajunge sau daca cred ca daca folosesc mai putina memorie imi va imbunatati sesizabil viteza de executie a programului (adica daca imi cresc sansele sa prind teste in plus), atunci folosesc int (bineinteles doar daca valorile incap pe int), iar mai apoi urmaresc cu atentie toate locurile in care folosesc sirul respectiv ca sa nu am probleme. In general, cu cat e mai simplu codul, cu atat mai bine. Nu are rost sa te complici pentru cativa bytes in plus sau in minus.

P.S.: Cum faceai descompunerea "ca sa fie bine"?

Multumesc de sfat. E foarte tare ca il dau si eu, dar nu il aplic. O sa incerc sa tin cont de el

Descompunerea clasica pana la radical din numar
Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #37 : Aprilie 12, 2012, 09:46:37 »

Deseori te omoara timpul rau de tot daca faci toate operatiile pe long long  Smile.

Intr-adevar, dureaza cu pana la 150% mai mult la inmultire si cu 100% mai mult la adunare daca faci asa:

Cod:
long long v = 0, i;
for (i = 0; i <= 1000000000; ++ i) {
    v = v + i;
}

fata de asa:

Cod:
int v = 0, i;
for (i = 0; i <= 1000000000; ++ i) {
    v = v + i;
}

Dar dureaza cu 83% mai mult la adunare si 24% mai mult la inmultire daca faci asa:

Cod:
long long v = 0, i;
for (i = 0; i <= 1000000000; ++ i) {
    v = v + i;
}

fata de asa:

Cod:
long long v = 0;
int i;
for (i = 0; i <= 1000000000; ++ i) {
    v = v + i;
}

Daca programul tau e la limita, intr-adevar conteaza optimizarile astea, dar daca nu consuma nici macar jumatate sau o treime din limita de timp, de ce sa te complici?
(Pe topcoder limita e de 2 secunde cam la toate problemele, desi 0.1 secunde ar fi arhisuficient la majoritatea).
Memorat
Pagini: 1 [2]   În sus
  Imprimă  
 
Schimbă forumul:  

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