Advertisement
a53

John

a53
Dec 26th, 2020 (edited)
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. /// INDICATIILE AUTORULUI
  2. /// Notăm cu Si mulțimea caselor la care lucrează muncitorul i și cu Pi mulțimea muncitorilor care lucrează la casa i.
  3. /// Răspunsurile sunt cardinalul maxim al unei mulțimi Sx și numărul maxim de elemente al unei mulțimi Py ⋂ Pz, unde x, y, z sunt
  4. /// numere naturale mai mici sau egale cu n, mai mari sau egale cu 1 si y ≠ z.
  5. #include <iostream>
  6. #include <algorithm>
  7. #define N 1001
  8. using namespace std;
  9.  
  10. #define DIM 10000000
  11. char buff[DIM];
  12. int poz=0;
  13. void citeste(int &numar) /// Parsarea numerelor naturale
  14. {
  15. numar=0;
  16. while(buff[poz]<'0'||buff[poz]>'9') /// cat timp caracterul din buffer nu e cifra ignor
  17. if(++poz==DIM) ///daca am "golit" bufferul atunci il umplu
  18. fread(buff,1,DIM,stdin),poz=0;
  19. while('0'<=buff[poz]&&buff[poz]<='9') /// cat timp dau de o cifra recalculez numarul
  20. {
  21. numar=numar*10+buff[poz]-'0';
  22. if(++poz==DIM)
  23. fread(buff,1,DIM,stdin),poz=0;
  24. }
  25. }
  26.  
  27. void citire(int A[][N],int &n,int &m) /// Citeste datele de intrare
  28. {
  29. citeste(n),citeste(m);
  30. for(int i=0;i<n;++i)
  31. for(int j=0;j<m;++j)
  32. citeste(A[i][j]);
  33. }
  34.  
  35. int cauta(int A[][N],int m,int i,int x) /// Cauta binar pe linia i daca exista elementul x
  36. {
  37. int Sol=0,st=0,dr=m;
  38. while(st<=dr)
  39. {
  40. int mij=(st+dr)/2;
  41. if(A[i][mij]==x)
  42. {
  43. Sol=1; ///=mij;
  44. break;
  45. }
  46. if(A[i][mij]>x)
  47. dr=mij-1;
  48. if(A[i][mij]<x)
  49. st=mij+1;
  50. }
  51. return Sol;
  52. }
  53.  
  54. int pecatelinii(int A[][N],int n,int m,int x) /// Cauta pe toate liniile daca exista elementul x
  55. {
  56. int c=0; /// Nr de linii pe care sfla elementul x
  57. for(int i=0;i<n;++i)
  58. if(cauta(A,m,i,x))
  59. ++c;
  60. return c;
  61. }
  62.  
  63. int intersectie(int a[],int b[],int m) /// Calculeaza numarul de elemente din intersectia vectorilor a si b
  64. {
  65. int k=0,i,j;
  66. i=0;j=0;
  67. while(i<m&&j<m)
  68. {
  69. if(i)
  70. while(a[i]==a[i-1])
  71. ++i;
  72. if(j)
  73. while(b[j]==b[j-1])
  74. ++j;
  75. if(a[i]< b[j])
  76. ++i;
  77. else
  78. if(b[j]<a[i])
  79. ++j;
  80. else
  81. ++i,++j,++k;
  82. }
  83. return k;
  84. }
  85. /// https://www.geeksforgeeks.org/implementing-multidimensional-map-in-c/
  86.  
  87. int main()
  88. {
  89. int A[N][N],n,m,Max=0,maxap=0;
  90. citire(A,n,m);
  91. for(int i=0;i<n;++i)
  92. {
  93. for(int j=0;j<m;++j)
  94. if(pecatelinii(A,n,m,A[i][j])>maxap)
  95. Max=A[i][j],maxap=pecatelinii(A,n,m,A[i][j]);
  96. else
  97. if(pecatelinii(A,n,m,A[i][j])==maxap&&A[i][j]<Max)
  98. Max=A[i][j];
  99. sort(A[i],A[i]+m);
  100. }
  101. int NrMaxC=0;
  102. for(int i=0;i<n-1;++i)
  103. for(int j=i+1;j<n;++j)
  104. {
  105. int s=intersectie(A[i],A[j],m);
  106. if(s>NrMaxC)
  107. NrMaxC=s;
  108. }
  109. printf("%d\n%d",maxap,NrMaxC);
  110. return 0;
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement