Advertisement
chunkyguy

gcj'11 - split candies

May 7th, 2011
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.72 KB | None | 0 0
  1. /*
  2.     Split Candies
  3.     sid@whackylabs.com
  4. */
  5.  
  6. #include<stdio.h>
  7.  
  8. #define DEBUG 0
  9. #define N_MAX 1000
  10.  
  11. long is_equal(int c[], int n, int pvt)
  12. {
  13.     int patrick = 0;
  14.     int sean = 0;
  15.     long sean_share = 0;
  16.     int i;
  17.     for(i = 0; i < n; i++)
  18.     {
  19.         if(i < pvt)
  20.             patrick ^= c[i];
  21.         else
  22.         {
  23.             sean ^= c[i];
  24.             sean_share += c[i];
  25.         }
  26.     }
  27.    
  28.     if(DEBUG) printf("pat: %d, sean: %d\n",patrick, sean);
  29.    
  30.     if(patrick == sean)
  31.         return sean_share;
  32.     return 0;
  33.    
  34. }
  35.  
  36. int main(int argc, char **argv)
  37. {
  38.     int t, n;
  39.     int c[N_MAX];
  40.     int case_no, candy;
  41.     int i,j, k;
  42.     long sharing_point = 0;
  43.     scanf("%d",&t);
  44.     for(case_no = 0; case_no < t;case_no++)
  45.     {
  46.         scanf("%d",&n);
  47.         for(candy = 0; candy < n; candy++)
  48.             scanf("%d",&c[candy]);
  49.        
  50.         //sort descending
  51.         for(i = 0; i < n; i++)
  52.         {
  53.             for(j = i+1, k = i; j < n; j++)
  54.             {
  55.                 if(c[j] < c[k])
  56.                     k = j;
  57.             }
  58.             if(i != k)
  59.             {
  60.                 j = c[i];
  61.                 c[i] = c[k];
  62.                 c[k] = j;
  63.             }
  64.         }
  65.        
  66.         if(DEBUG)
  67.         {
  68.             for(i = 0; i < n; i++)
  69.                 printf("%d ",c[i]);
  70.             printf("\n");
  71.         }
  72.        
  73.         for(i = 1; i < n; i++)
  74.         {
  75.             //patrick share
  76.             //sean share
  77.             if(sharing_point = is_equal(c, n, i))
  78.                 break;
  79.         }
  80.         if(sharing_point)
  81.             printf("Case #%d: %ld\n",case_no+1,sharing_point);
  82.         else
  83.             printf("Case #%d: NO\n",case_no+1);
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement