[ proka_92 @ 27.03.2010. 19:21 ] @
Ulaz: 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;} Sta nije u redu? |