Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// INDICATIILE AUTORULUI
- /// Notăm cu Si mulțimea caselor la care lucrează muncitorul i și cu Pi mulțimea muncitorilor care lucrează la casa i.
- /// 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
- /// numere naturale mai mici sau egale cu n, mai mari sau egale cu 1 si y ≠ z.
- #include <iostream>
- #include <algorithm>
- #define N 1001
- using namespace std;
- #define DIM 10000000
- 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;
- }
- }
- void citire(int A[][N],int &n,int &m) /// Citeste datele de intrare
- {
- citeste(n),citeste(m);
- for(int i=0;i<n;++i)
- for(int j=0;j<m;++j)
- citeste(A[i][j]);
- }
- int cauta(int A[][N],int m,int i,int x) /// Cauta binar pe linia i daca exista elementul x
- {
- int Sol=0,st=0,dr=m;
- while(st<=dr)
- {
- int mij=(st+dr)/2;
- if(A[i][mij]==x)
- {
- Sol=1; ///=mij;
- break;
- }
- if(A[i][mij]>x)
- dr=mij-1;
- if(A[i][mij]<x)
- st=mij+1;
- }
- return Sol;
- }
- int pecatelinii(int A[][N],int n,int m,int x) /// Cauta pe toate liniile daca exista elementul x
- {
- int c=0; /// Nr de linii pe care sfla elementul x
- for(int i=0;i<n;++i)
- if(cauta(A,m,i,x))
- ++c;
- return c;
- }
- int intersectie(int a[],int b[],int m) /// Calculeaza numarul de elemente din intersectia vectorilor a si b
- {
- int k=0,i,j;
- i=0;j=0;
- while(i<m&&j<m)
- {
- if(i)
- while(a[i]==a[i-1])
- ++i;
- if(j)
- while(b[j]==b[j-1])
- ++j;
- if(a[i]< b[j])
- ++i;
- else
- if(b[j]<a[i])
- ++j;
- else
- ++i,++j,++k;
- }
- return k;
- }
- /// https://www.geeksforgeeks.org/implementing-multidimensional-map-in-c/
- int main()
- {
- int A[N][N],n,m,Max=0,maxap=0;
- citire(A,n,m);
- for(int i=0;i<n;++i)
- {
- for(int j=0;j<m;++j)
- if(pecatelinii(A,n,m,A[i][j])>maxap)
- Max=A[i][j],maxap=pecatelinii(A,n,m,A[i][j]);
- else
- if(pecatelinii(A,n,m,A[i][j])==maxap&&A[i][j]<Max)
- Max=A[i][j];
- sort(A[i],A[i]+m);
- }
- int NrMaxC=0;
- for(int i=0;i<n-1;++i)
- for(int j=i+1;j<n;++j)
- {
- int s=intersectie(A[i],A[j],m);
- if(s>NrMaxC)
- NrMaxC=s;
- }
- printf("%d\n%d",maxap,NrMaxC);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement