Advertisement
Sammy24

SOLUTIE

Mar 16th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1.  
  2. Problema 2 - pseudobil
  3. Autor: prof. Constantin Gălățan,
  4. Colegiul Național „Liviu Rebreanu”, Bistrița
  5.  
  6. Cerința 1 ( 20 puncte)
  7. Se parcurg segmentele orizontale care conțin numai celule în interiorul pătratului.
  8. Se observă că segmentul de lungime maximă are nr = D – 1 celule. Segmentul aflat imediat de deasupra și cel de dedesupt au fiecare câte (nr – 2) celule. Soluția va fi
  9.  
  10. nr1 = nr + 2 * ( nr – 2) + 2 * (nr – 4) + ... + 2 * 1
  11.  
  12. Cerința 2 ( 80 de puncte)
  13. Soluție O(m * n2)
  14. Pentru fiecare interogare, se parcurg orizontal toate segmentele formate din celule interioare sau traversate pe diagonală de către laturile pătratului.
  15. Acestă soluție obține 30 de puncte din punctajul cerinței 2.
  16.  
  17. Soluție O(m * K) (Ciprian Cheșcă)
  18. Se știe că o dreaptă de ecuație ax+by+c = 0 împarte planul în două semiplane cu proprietatea că toate punctele dintr-un semiplan verifică relația ax+by+c > 0 sau ax+by+c< 0.
  19. Notând vârfurile cadrului cu ABCD laturile acestuia formează 4 drepte : AB, CD respectiv AD, BC. Putem considera că o bila se găsește în interiorul cadrului dacă bila se găsește în regiunea pozitivă a semiplanului AB și regiunea negativă a semiplanului CD și analog dacă bila se găsește în regiunea pozitivă a semiplanului AD și regiunea negativă a semiplanului BC.
  20. Calculând în ce semiplan se găsește fiecare bilă în funcție de poziția cadrului se poate deduce dacă bila este în interiorul cadrului sau pe una din laturi.
  21. Acestă soluție obține 30 de puncte din punctajul cerinței 2.
  22.  
  23. Soluție O(n2 + m * n)
  24. Pentru reducerea complexității la O(n) per interogare, se rețin sumele parțiale pentru fiecare coloană a matricei.
  25. Fie deci matricea a, cu a[i][j] - numărul de bile aflate pe coloana j, până la linia i.
  26. Se parcurge fiecare segment vertical aflat în interiorul cadrului și se calculează numărul de bile ca fiind a[i2][j] – a[i1][j] unde i2 este linia pe care se găsește ultima celulă (cea mai de jos), iar i1 este linia anterioară primei celule a segmentului.
  27. Acestă soluție obține 60 de puncte din punctajul cerinței 2.
  28. j
  29.  
  30. i1
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37. i2
  38.  
  39.  
  40.  
  41.  
  42. Soluție O(n2 + m) (Constantin Gălățan)
  43. Se poate răspunde la fiecare întrebare în O(1) dacă se precalculează în O(n * n) sumele parțiale în raport cu diagonalele.
  44. În continuare vom numi diagonală secundară oricare diagonală care e paralelă cu diagonala secundară și vom numi diagonală principală oricare diagonală care e paralelă cu diagonala principală.
  45.  
  46. Definim matricile: su, sd, pu, pd cu semnificațiile:
  47. su[i][j] – numărul de bile aflate deasupra și pe diagonala secundară i, pe coloanele 1..j. (up)
  48. sd[i][j] – numărul de bile aflate sub și pe diagonala secundară i, pe coloanele 1..j. (down)
  49. sp[i][j] – numărul de bile aflate deasupra și pe diagonala principală i, pe coloanele 1..j. (up)
  50. sd[i][j] – numărul de bile aflate sub și pe diagonala secundară i, pe coloanele 1..j. (down)
  51.  
  52. Diagonalele secundare se numerotează 1, 2, ... 2 * n – 1 începând cu cea de la celula (1, 1)
  53. Diagonalele principale se numerotează 1, 2, ... 2 * n – 1 începând cu cea de la celula (n, 1)
  54. În exemplele de mai jos, su[5][4], pd[5][4], sd[7][5], pu[7][5] reprezintă numărul de bile care se găsesc în interiorul zonelor hașurate.
  55.  
  56.  
  57.  
  58. 4 5
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69. su[5][4] sd[7][5]
  70.  
  71.  
  72. 4 5
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97. pd[5][4] pu[7][5]
  98.  
  99.  
  100.  
  101.  
  102. Pentru a afla numărul de bile din interiorul cadrului plasat cu colțul superior în centrul celulei (x, y), se fac sume și diferențe de sume parțiale. Vă puteți gândi la arii și la principiul includerii și excluderii.
  103. Prin urmare, aria poligonului acoperit de cadru (numărul de bile acoperite) va fi egală cu aria întregii suprafețe, din care se scad ariile poligoanelor marcate cu roșu, verde și albastru:
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122. Această soluție obține - 80 de puncte, punctajul maxim pentru cerința 2.
  123.  
  124.  
  125. Soluție O(n2 + m) (Eugen Nodea)
  126.  
  127. Cum putem transforma problema într-o problemă clasică?
  128. Inițial avem o matrice și un cadru pătratic (romb) paralel cu diagonalele matricei.
  129. Dar dacă ”rotim” cu 450 matricea inițială, atunci vom avea un romb în care este inclus un cadru pătrat.
  130. Să privim figura alăturată ce descrie rotația:
  131.  
  132. inițial După rotație
  133.  
  134.  
  135.  
  136.  
  137. Matricea nou creată are (2*N-1)*(2*N-1) elemente.
  138. Astfel problema se reduce la o problemă clasică:
  139. ”Pentru o matrice pătratică binară (conține valori de 0 și 1) să se determine numărul de valori de 1 aflate în pătratul (rombul) de latura D, pătrat pentru care se cunoaște colțul dreapta sus”.
  140. Astfel, pentru fiecare interogare se va răspunde în O(1).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement