Clasa a VII-a lecția 31 - 3 apr 2020

From Algopedia
Jump to navigationJump to search

Anunț

Dragi curioși, IQ Academy este un loc unde învățăm informatică la cel mai înalt nivel. Dacă vreți să scrieți cod mediocru nu aveți nevoie să veniți aici. 99% din oameni scriu cod mediocru. Unul din exemplele care revine în mod curent este cel în care aveți nevoie de conversii de tip. În mod curent scrieți înmulțiri cu 1LL, sau declarați în mod gratuit variabilele de tip long long (ceea ce încetinește programul de aproximativ 3-4 ori), sau treceți prin variabile auxiliare nenecesare pentru a face conversiile.

Precum v-am mai spus, nerespectarea unor reguli de bază duce la pierderea calificării la IQ Academy. Dacă vă place să scrieți cod mediocru, în mod evident luat de la altcineva, nu de la mine, mergeți la acel instructor care vă învață și vă tolerează greșeli de bază. Va fi interesant să explicați părinților și prietenilor de ce v-ați pierdut calificarea. Îmi închipui o conversație de genul:

- A fost dur, nu?
- Nu...
- A fost foarte grea materia, atunci?
- Nu, nici asta...
- Atunci era prea mult de lucru și nu ai făcut față?
- Nu, nici vorbă...
- Atunci? Cum ți-ai pierdut calificarea??
- Păi n-am fost în stare să fac conversia la long long în mod corect.
- Serios?? ... (în gînd: ăsta e cam prostănac, eu nu ratam așa o ocazie, oare ce fel de prieten îmi este?)

Tema - rezolvări

Țări

Problema tari este menționată în cursul algopedia eliminare zid. Aș aprecia-o de nivel ONI clasa a 7a.

Triple trouble

Problema triple trouble este una clasică.

Comentarii individuale

  • Aizic: long long poz[3];
    (Evită problema declarînd indicii, de tip long long. Frumos! Da, indicii, dintr-un motiv obscur, sînt poz[0] și poz[3])
  • Asgari: ans += (1LL * i * k);
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul.)
  • Badea: nr+=1LL*(j-1)*(k-1);
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul.)
  • Benescu: fb r=r+(ll)(cba(vb[i], a)+1)*(cbc(vb[i], c)+1);
    (Nu înțelegeți acest cod? Nici nu ați avea cum, căci el are mai sus niște #define care redefinesc însuși limbajul C! De exemplu, fb este definit astfel: #define fb for(i=0; i<b; i++) Benescu, nu mi-e clar dacă ți se pare deștept să faci asta, dar nu este, este doar încîlcirea unui cod pentru a deveni necitibil. Vrei cod mai scurt? Ce-ar fi să nu scrii de trei ori sortarea și de două ori căutarea binară?)
  • Burac: triplete += 1LL * i * k;
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul.)
  • Calotă: s += 1LL * x * y;
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul.)
  • Cojocariu: s+=(long long)na*nc;
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Dimulescu: pozc = cautare_binara( c, nc, b[i] ); sol += (poza + 1) * (pozc + 1);
    (Evită conversia folosind două variabile auxiliare de tip long long, poza și pozb. Cel puțin nu sînt indici în vector, cum am văzut la alții)
  • Dobre: x=caut_bin(n,a,b[i]);
    (Evită problema declarînd funcția de căutare binară ca returnînd un long long. Mai grav, în acea funcție declară indicele 'stinga' drept long long, ceea ce duce la conversii continue de tip)
  • Grecu: trip += (((long long)pa) + 1) * (pc + 1);
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Ilie: nsol += (long long)i * k;
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Iordache: s=s+ia*ic;
    (Nici nu s-a prins că este nevoie de vreo conversie. De aceea a picat multe teste).
  • Ipate: long long s, nra, nrc;
    (Evită problema declarînd indicii, de tip long long. Frumos!)
  • Marcu: long long na, nb, nc, i, e, trip, comb, poz;
    (Evită complet problema declarînd tot, inclusiv indicii, de tip long long. Frumos!)
  • Mocanu: c2+=(unsigned long long)z*s[y];
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Mușat: ans += (long long)poz1 * poz2;
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Nicola: sum += poz[0] * 1LL * poz[2];
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul.)
  • Nicu: trip += 1LL * ( p1 - 1 ) * ( p3 - 1 );
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul.)
  • Petcu: nr += (long long)x * y;
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Petrescu: k=st+1; s=s+j*k;
    (Evită conversia folosind două variabile auxiliare de tip long long, j și k. Cel puțin nu sînt indici în vector, cum am văzut la alții)
  • Popescu: s += ((long long)nr1 + 1) * (nr2 + 1);
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Rebengiuc: ntri += ((long long)i) * k;
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Rughiniș: x=ja; x*=jc;
    (Evită conversia directă folosind o variabilă auxiliară, x, declarată long long)
  • Stancu: sol += (long long)j * k;
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Ștefănescu: nr += nrc*nra;
    (Evită problema dublînd indicii na și nc cu variabile long long nra și nrc. Cînd indicii se măresc cu unu, și variabilele long long se măresc cu 1. Dublăm munca, dublăm codul, frumos!)
  • Tatomir: long long int s,q;
    (Evită problema declarînd un indice long long. Frumos! De asemenea folosește trei funcții de sortare. Ce bine că problema nu cerea sortarea a 50 de vectori, altfel ar fi avut 50 de funcții de scris.)
  • Teodorescu: s += i * (long long)j;
    (Corect, așa cum v-am învățat, prin conversie de tip a indicilor)
  • Togan: long long nrvar,j,k;
    (Evită problema declarînd indicii în vector de tip long long. Frumos!).
  • Voicu M: rez+=(nb-p2)*(p1*(1LL*p3));
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul. De asemenea folosește trei funcții de sortare. Ce bine că problema nu cerea sortarea a 50 de vectori, altfel ar fi avut 50 de funcții de scris.)
  • Voicu T: cate+=1LL*x*y;
    (transformare la long long prin înmulțire cu 1. Frumos! De ce să nu efectuăm o înmulțire fără noimă, cu unu, doar nu o facem noi, o face prostul.)

Merele lui Gary

Problema merele lui Gary este o glumă, desigur.

Rezolvări aici [1].

Lecție - concurs (de acasă)

Concurs clasele a 7a și a 9a

Temă

Problemele au fost adăugate la tema 31.

Rezolvări aici [2].