Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- using namespace std;
- int n,m,x;
- set<int> A[1001],S; /// A=matricea ce retine datele de intrare
- set<int>::iterator it,jt;
- int pecatelinii(int x) /// Cauta pe toate liniile daca exista elementul x si le numara
- {
- int c=0; /// Numarul de linii pe care se afla elementul x
- for(int i=0;i<n;++i)
- if(A[i].find(x)!=A[i].end())
- ++c;
- return c;
- }
- int intersectie(int Li,int Lj) /// Calculeaza numarul de elemente din intersectia a doua linii Li si Lj
- {
- int k=0; /// Numarul de elemente din intersectie
- it=A[Li].begin(),jt=A[Lj].begin();
- while(it!=A[Li].end()&&jt!=A[Lj].end())
- {
- if(*it<*jt)
- ++it;
- else
- if(*jt<*it)
- ++jt;
- else /// Daca elementele sunt egale, atunci fac parte din intersectie
- ++k,++it,++jt;
- }
- return k;
- }
- #define DIM 1280000
- char buff[DIM];
- int poz=0;
- void citeste(int &numar) /// Parsarea numerelor naturale
- {
- numar=0;
- while(buff[poz]<'0'||buff[poz]>'9') /// cat timp caracterul din buffer nu e cifra ignor
- if(++poz==DIM) ///daca am "golit" bufferul atunci il umplu
- fread(buff,1,DIM,stdin),poz=0;
- while('0'<=buff[poz]&&buff[poz]<='9') /// cat timp dau de o cifra recalculez numarul
- {
- numar=numar*10+buff[poz]-'0';
- if(++poz==DIM)
- fread(buff,1,DIM,stdin),poz=0;
- }
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- citeste(n),citeste(m); /// Aici citesc
- for(int i=0;i<n;++i) /// datele de intrare
- for(int j=0;j<m;++j)
- citeste(x),A[i].insert(x),S.insert(x); /// S retine casele
- int NrMaxM=0; /// Numarul maxim de muncitori care lucreaza la aceeasi casa
- for(it=S.begin();it!=S.end();++it) /// Parcurg toate casele si aflu numarul maxim de aparitii pe linii
- NrMaxM=max(NrMaxM,pecatelinii(*it)); /// Aflu de cate ori acea casa se afla pe linii
- int NrMaxC=0; /// Numarul Maxim ce case la care lucreaza simultan 2 muncitori
- for(int i=0;i<n-1;++i)
- for(int j=i+1;j<n;++j)
- NrMaxC=max(intersectie(i,j),NrMaxC); /// intersectia=nr de case la care lucreaza simultan muncitoii i si j
- cout<<NrMaxM<<'\n'<<NrMaxC;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement