[ 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?
[ Mihajlo Cvetanović @ 27.03.2010. 20:03 ] @
Debagovanjem sam ustanovio sledeće: funkcija trazi() ti vraća indeks nađenog elementa, ili -1 ako element nije nađen. Ti ovu funkciju koristiš kao da ona vraća bool. Da bi program proradio povratnu vrednost funkcije treba da porediš sa -1.
[ proka_92 @ 27.03.2010. 21:05 ] @
Dada, posto moze da se desi da index bude 0, a to se tretira kao false... Ne razmisljam :) Hvala...