Sa standardnog ulaza se ucitava broj N[1] koji predstavlja broj gradova na spisku koji je dostavio prvi drugar Z-a. Nakon toga, u drugoj liniji sledi N[1] brojeva u opsegu [1..2000000000] razmaknutim blanko znakom, koji predstavlja gradove na spisku prvog drugara. Zatim se ucitava broj N[2], i slicno, iza njega N[2] brojeva koji predstavljaju gradove na spisku drugog drugara, i konacno se ucitava broj N[3] i N[3] gradova sa spiska treceg drugara. Na spisku svakog od drugara gradovi se nece ponavljati.
Izlaz:
Na standardni izlaz ispisati broj K, koji predstavlja broj gradova u koje mogu da doputuju sva tri drugara.
Link ka zadatku
Code:
#include<stdio.h>
long prvi[1001],drugi[1001],treci[1001];
int n1,n2,n3,zajednicki=0;
void swap(long *a,long *b){
long tmp;
tmp=*a;
*a=*b;
*b=tmp;}
void sort(int n,long niz[]){
int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(niz[i]>niz[j])
swap(&niz[i],&niz[j]);}
long trazi(int n,long elem,long niz[]){
int i,j;
i=(n-1)/2;
j=n;
do{
j/=2;
if(niz[i]==elem)
return i;
if(niz[i]<elem)
i+=(j+1)/2;
else
i-=(j+1)/2;}
while(j);
return (-1);}
void input(){
int i;
scanf("%d",&n1);
for(i=0;i<n1;i++)
scanf("%ld",&prvi[i]);
scanf("%d",&n2);
for(i=0;i<n2;i++)
scanf("%ld",&drugi[i]);
scanf("%d",&n3);
for(i=0;i<n3;i++)
scanf("%ld",&treci[i]);}
void solve(){
int i;
sort(n1,prvi);
sort(n2,drugi);
sort(n3,treci);
for(i=0;i<n1;i++)
if((trazi(n2,prvi[i],drugi))&&(trazi(n3,prvi[i],treci)))
zajednicki++;}
int main(){
input();
solve();
printf("%d",zajednicki);
return 0;}
#include<stdio.h>
long prvi[1001],drugi[1001],treci[1001];
int n1,n2,n3,zajednicki=0;
void swap(long *a,long *b){
long tmp;
tmp=*a;
*a=*b;
*b=tmp;}
void sort(int n,long niz[]){
int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(niz[i]>niz[j])
swap(&niz[i],&niz[j]);}
long trazi(int n,long elem,long niz[]){
int i,j;
i=(n-1)/2;
j=n;
do{
j/=2;
if(niz[i]==elem)
return i;
if(niz[i]<elem)
i+=(j+1)/2;
else
i-=(j+1)/2;}
while(j);
return (-1);}
void input(){
int i;
scanf("%d",&n1);
for(i=0;i<n1;i++)
scanf("%ld",&prvi[i]);
scanf("%d",&n2);
for(i=0;i<n2;i++)
scanf("%ld",&drugi[i]);
scanf("%d",&n3);
for(i=0;i<n3;i++)
scanf("%ld",&treci[i]);}
void solve(){
int i;
sort(n1,prvi);
sort(n2,drugi);
sort(n3,treci);
for(i=0;i<n1;i++)
if((trazi(n2,prvi[i],drugi))&&(trazi(n3,prvi[i],treci)))
zajednicki++;}
int main(){
input();
solve();
printf("%d",zajednicki);
return 0;}
Sta nije u redu?