Guest User

Untitled

a guest
Apr 24th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.17 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3.  
  4.  
  5.  
  6. void q_sort(int numbers[], int left, int right)
  7. {
  8.   int pivot, l_hold, r_hold;
  9.  
  10.   l_hold = left;
  11.   r_hold = right;
  12.   pivot = numbers[left];
  13.   while (left < right)
  14.   {
  15.     while ((numbers[right] <= pivot) && (left < right))
  16.       right--;
  17.     if (left != right)
  18.     {
  19.       numbers[left] = numbers[right];
  20.       left++;
  21.     }
  22.     while ((numbers[left] >= pivot) && (left < right))
  23.       left++;
  24.     if (left != right)
  25.     {
  26.       numbers[right] = numbers[left];
  27.       right--;
  28.     }
  29.   }
  30.   numbers[left] = pivot;
  31.   pivot = left;
  32.   left = l_hold;
  33.   right = r_hold;
  34.   if (left < pivot)
  35.     q_sort(numbers, left, pivot-1);
  36.   if (right > pivot)
  37.     q_sort(numbers, pivot+1, right);
  38. }
  39.  
  40. void quickSort(int numbers[], int array_size)
  41. {
  42.   q_sort(numbers, 0, array_size - 1);
  43. }
  44.  
  45. main()
  46. {
  47.       int t,A[1000000],act,count=0,B[1000000];
  48.       long long n,k,i,sum;
  49.       scanf("%d",&t);
  50.       while(t--)
  51.       {
  52.                 scanf("%lld %lld",&n,&k);
  53.                 for(i=0;i<n;i++)
  54.                 {
  55.                                 scanf("%d",&A[i]);
  56.                 }
  57.                 quickSort(A,n);
  58.                 //for(i=0;i<n;i++)
  59. //                {
  60. //                                printf("%d",A[i]);
  61. //                }
  62. //                printf("\n");
  63.                 count=0;  
  64.                 sum=0;
  65.                 act=A[n-k];
  66.                 i=0;
  67.                 B[n-1]=A[n-1];
  68.                 i=n-2;
  69.                 while(i>=0)
  70.                 {
  71.                          
  72.                           B[i]=(A[i]>(act+B[i+1]))?act:A[i];
  73.                           i--;
  74.                 }
  75.                 //for(i=0;i<n;i++)
  76. //                {
  77. //                                printf("%d ",B[i]);
  78. //                }
  79. //                printf("\n");
  80.                 sum=0;
  81.                 i=0;
  82.                 count=0;
  83.                 while(i<n&&count<k)
  84.                 {
  85.                                    sum+=B[i];
  86.                                    if(B[i]==A[i]||k-1-count==n-1)
  87.                                    {
  88.                                                  sum+=A[i]-B[i];
  89.                                                  count++;
  90.                                    }
  91.                                    i++;
  92.                 }
  93.                                
  94.               //  while(count<k)
  95. //                {
  96. //                             // printf("%d %d",act,A[i]);
  97. //                                if(k-1-count==n-i)
  98. //                                {
  99. //                                                  sum+=A[i];
  100. //                                                  count++;
  101. //                                             //     printf("1 ");
  102. //                                }            
  103. //                                else
  104. //                                {    
  105. //                                if(A[i]<=act)
  106. //                                {
  107. //                                          sum+=A[i];
  108. //                                          count++;
  109. //                                        //  printf("2 ");
  110. //                                }
  111. //                                else
  112. //                                {
  113. //                                    if(A[i]-act<A[i+1])
  114. //                                    {
  115. //                                                       sum+=A[i];
  116. //                                                       count++;
  117. //                                                     //  printf("3 ");
  118. //                                    }
  119. //                                    else
  120. //                                    {
  121. //                                                       sum+=act;
  122. //                                                     //  printf("4 ");
  123. //                                    }
  124. //                                }
  125. //                                }
  126. //                                i++;
  127. //                                //printf("%d\t",A[i]);
  128. //                                
  129. //                }
  130.                  
  131.                  
  132.                  
  133.                 printf("%lld\n",sum);
  134.       }
  135.       return 0;
  136. }
Add Comment
Please, Sign In to add comment