Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.
- Generarea sumelor nu se încadrează în timp pentru datele mari.
- Dacă termenii sumei se grupează se poate obține:
- Pe coloana 0: apare 0 de (d+1) ori şi suma 0+1+2+...+d = d*(d+1)/2
- Pe coloana 1: apare 1 de d ori şi suma 1+2+...+d = d*(d+1)/2
- Pe coloana 2: apare 2 de d-1 ori și suma 2+3+..+d = 1+2+3+ +d -1 = d*(d+1)/2 -1
- 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
- …
- 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)
- 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)
- Adunăm aceste sume și obținem:
- (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) =
- (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 =
- (d+1) * (d*(d+1)/2) + 1+2+3+..+d =
- (d+1) * (d*(d+1)/2) + d*(d+1)/2 = (d+1+1)* d*(d+1)/2 = d*(d+1)*(d+2)/2
- Deci suma pentru fiecare d în parte devine: d*(d+1)*(d+2)/2.
- Cerința 2
- O modalitate de rezolvare poate fi:
- - se atașează fiecărei valori v[i] valoarea p[i] = 10numarul_de_cifre_v[i] – 1
- - se parcurge vectorul v[], luând alternative valorile v[i] (i=1, i≤j) și v[j] (j=n, j≥i)
- - pentru v[i] cifrele se generează astfel:
- cif = v[i]/p[i]; v[i] %= p[i]; p[i] /= 10;
- - pentru v[j] cifrele se generează astfel:
- cif = v[j] % 10; v[j] /= 10;
- - din cauza dimensiunii numerelor ce se pot obține se vor folosi șiruri de caractere
- sir_anterior, șir_urmator
- - în sir_urmator se introduc cifre până la prima valoarea strict mai mare decât sir_anterior
- - erau necesare prelucrări pentru situația: prima cifră din sir_urmator este 0
- Teste au fost alese astfel încât se putea obține punctaj și în situația folosirii datelor de tip long long.
- 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