Monday, 8 June 2015

http://www.codechef.com/problems/VOTERS


  1. #include<stdio.h>
  2. void mergesort(long long *ar,long long ,long long);
  3. void merge(long long*ar,long long,long long,long long);
  4. void mergesort(long long *ar,long long left,long long right)
  5. {
  6. long long mid=((left+right)/2);
  7. if(left<right)
  8. {
  9. mergesort(ar,left,mid);
  10. mergesort(ar,mid+1,right);
  11. merge(ar,left,mid,right);
  12. }
  13. }
  14. void merge(long long*ar,long long left,long long mid,long long right)
  15. {
  16. long long t[right-left+1];
  17. long long pos=0;long long i;
  18. long long lpos=left,rpos=mid+1;
  19. while(lpos<=mid && rpos<=right)
  20. {
  21. if(ar[lpos]<ar[rpos])
  22. {
  23. t[pos++]=ar[lpos++];
  24. }
  25. else
  26. {
  27. t[pos++]=ar[rpos++];
  28. }
  29. }
  30. while(lpos<=mid)
  31. t[pos++]=ar[lpos++];
  32. while(rpos<=right)
  33. t[pos++]=ar[rpos++];
  34. for(i=0;i<pos;i++)
  35. ar[left+i]=t[i];
  36. return ;
  37. }
  38. long long ar[1000000]={0},ans[1000000]={0};
  39. int main()
  40. {
  41. long long n1,n2,n3,i,b=0,k=0,j;
  42. long long ar1[50005],ar2[50005],ar3[50005];
  43. scanf("%lld%lld%lld",&n1,&n2,&n3);
  44. for(i=0;i<n1;i++)
  45. scanf("%lld",&ar1[i]);
  46. for(i=0;i<n2;i++)
  47. scanf("%lld",&ar2[i]);
  48. for(i=0;i<n3;i++)
  49. scanf("%lld",&ar3[i]);
  50. // first finding commom elements in first two arrays
  51. i=0;j=0;
  52. while(i<n1 && j<n2)
  53. {
  54. if(ar1[i]==ar2[j])
  55. {
  56. ar[b++]=ar1[i];
  57. i++;j++;
  58. }
  59. else if(ar1[i]>ar2[j])
  60. j++;
  61. else
  62. i++;
  63. }
  64. i=0;j=0;
  65. while(i<n2 && j<n3)
  66. {
  67. if(ar2[i]==ar3[j])
  68. {
  69. ar[b++]=ar2[i];
  70. i++;j++;
  71. }
  72. else if(ar2[i]>ar3[j])
  73. j++;
  74. else
  75. i++;
  76. }
  77. i=0;j=0;
  78. while(i<n1 && j<n3)
  79. {
  80. if(ar1[i]==ar3[j])
  81. {
  82. ar[b++]=ar1[i];
  83. i++;j++;
  84. }
  85. else if(ar1[i]>ar3[j])
  86. j++;
  87. else
  88. i++;
  89. }
  90. mergesort(ar,0,b-1);
  91. if(ar[0]!=0)
  92. ans[k++]=ar[0];
  93. for(i=1;i<b;i++)
  94. if(ar[i]!=ar[i-1])
  95. ans[k++]=ar[i];
  96. printf("%lld\n",k);
  97. for(i=0;i<k;i++)
  98. printf("%lld\n",ans[i]);
  99. return 0;
  100. }

No comments:

Post a Comment