http://www.codechef.com/problems/VOTERS
- #include<stdio.h>
- void mergesort(long long *ar,long long ,long long);
- void merge(long long*ar,long long,long long,long long);
- void mergesort(long long *ar,long long left,long long right)
- {
- long long mid=((left+right)/2);
- if(left<right)
- {
- mergesort(ar,left,mid);
- mergesort(ar,mid+1,right);
- merge(ar,left,mid,right);
- }
- }
- void merge(long long*ar,long long left,long long mid,long long right)
- {
- long long t[right-left+1];
- long long pos=0;long long i;
- long long lpos=left,rpos=mid+1;
- while(lpos<=mid && rpos<=right)
- {
- if(ar[lpos]<ar[rpos])
- {
- t[pos++]=ar[lpos++];
- }
- else
- {
- t[pos++]=ar[rpos++];
- }
- }
- while(lpos<=mid)
- t[pos++]=ar[lpos++];
- while(rpos<=right)
- t[pos++]=ar[rpos++];
- for(i=0;i<pos;i++)
- ar[left+i]=t[i];
- return ;
- }
- long long ar[1000000]={0},ans[1000000]={0};
- int main()
- {
- long long n1,n2,n3,i,b=0,k=0,j;
- long long ar1[50005],ar2[50005],ar3[50005];
- scanf("%lld%lld%lld",&n1,&n2,&n3);
- for(i=0;i<n1;i++)
- scanf("%lld",&ar1[i]);
- for(i=0;i<n2;i++)
- scanf("%lld",&ar2[i]);
- for(i=0;i<n3;i++)
- scanf("%lld",&ar3[i]);
- // first finding commom elements in first two arrays
- i=0;j=0;
- while(i<n1 && j<n2)
- {
- if(ar1[i]==ar2[j])
- {
- ar[b++]=ar1[i];
- i++;j++;
- }
- else if(ar1[i]>ar2[j])
- j++;
- else
- i++;
- }
- i=0;j=0;
- while(i<n2 && j<n3)
- {
- if(ar2[i]==ar3[j])
- {
- ar[b++]=ar2[i];
- i++;j++;
- }
- else if(ar2[i]>ar3[j])
- j++;
- else
- i++;
- }
- i=0;j=0;
- while(i<n1 && j<n3)
- {
- if(ar1[i]==ar3[j])
- {
- ar[b++]=ar1[i];
- i++;j++;
- }
- else if(ar1[i]>ar3[j])
- j++;
- else
- i++;
- }
- mergesort(ar,0,b-1);
- if(ar[0]!=0)
- ans[k++]=ar[0];
- for(i=1;i<b;i++)
- if(ar[i]!=ar[i-1])
- ans[k++]=ar[i];
- printf("%lld\n",k);
- for(i=0;i<k;i++)
- printf("%lld\n",ans[i]);
- return 0;
- }
No comments:
Post a Comment