Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. Pentru un set de dominouri de dimensiune d, determinarea valorii cerute se poate realiza generând toate sumele de forma (i,j), cu 0 ≤ i ≤ d și 0 ≤ j ≤ i.
  2. Generarea sumelor nu se încadrează în timp pentru datele mari.
  3. Dacă termenii sumei se grupează se poate obține:
  4.  
  5.  
  6.  
  7. Pe coloana 0: apare 0 de (d+1) ori şi suma 0+1+2+...+d = d*(d+1)/2
  8. Pe coloana 1: apare 1 de d ori şi suma 1+2+...+d = d*(d+1)/2
  9. Pe coloana 2: apare 2 de d-1 ori și suma 2+3+..+d = 1+2+3+ +d -1 = d*(d+1)/2 -1
  10. Pe coloana 3: apare 3 de d-2 ori și suma 3+4+...+d = 1+2+3+4+…+d = d*(d+1)/2 – 1-2
  11. Pe coloana i: apare i de d-i+1 ori și suma i+(i+1)+...+d = 1+2+..+(i-1) + i + (i+1) +... + d –(1+2+…+i-1) = d*(d+1)/2 – (1+2+..+i-1)
  12. Pe coloana d: d apare de 1 ori și d = 1+2+..+(d-1) + d – (1+2+…+d-1) = d*(d+1)/2 –(1+2+..+d-1)
  13. Adunăm aceste sume și obținem:
  14. (d+1)*(d*(d+1)/2) + 1*d + 2*(d-1) + 3*(d-2) + ... + d*1 –1-(1+2)–(1+2+3)-...-(1+2+…d-1) =
  15. (d+1)* (d*(d+1)/2) +1*d +2*(d-1) + 3*(d-2) + ... + d*1–1*(d-1)–2*(d-2)–3*(d-3)-..-(d-1)*1 =
  16. (d+1) * (d*(d+1)/2) + 1+2+3+..+d =
  17. (d+1) * (d*(d+1)/2) + d*(d+1)/2 = (d+1+1)* d*(d+1)/2 = d*(d+1)*(d+2)/2
  18. Deci suma pentru fiecare d în parte devine: d*(d+1)*(d+2)/2.
  19.  
  20. Cerința 2
  21. O modalitate de rezolvare poate fi:
  22. - se atașează fiecărei valori v[i] valoarea p[i] = 10numarul_de_cifre_v[i] – 1
  23. - se parcurge vectorul v[], luând alternative valorile v[i] (i=1, i≤j) și v[j] (j=n, j≥i)
  24. - pentru v[i] cifrele se generează astfel:
  25. cif = v[i]/p[i]; v[i] %= p[i]; p[i] /= 10;
  26. - pentru v[j] cifrele se generează astfel:
  27. cif = v[j] % 10; v[j] /= 10;
  28. - din cauza dimensiunii numerelor ce se pot obține se vor folosi șiruri de caractere
  29. sir_anterior, șir_urmator
  30. - în sir_urmator se introduc cifre până la prima valoarea strict mai mare decât sir_anterior
  31. - erau necesare prelucrări pentru situația: prima cifră din sir_urmator este 0
  32. Teste au fost alese astfel încât se putea obține punctaj și în situația folosirii datelor de tip long long.
  33. Există teste în care valorile pe baza cărora se obțin șirurile sunt formate din cifre nenule.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement