fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int find(int arr[],int p,int q,int k)
  5. {
  6.  
  7. if(q==p)
  8. return arr[p];
  9. if(q==p+1)
  10. return (arr[q]-(arr[p]-k));
  11. else
  12. {
  13. arr[q]--;
  14. arr[p]--;
  15. if(arr[p]>k)
  16. { sort(arr+p,arr+q+1);
  17. return find(arr,p,q,k);
  18. }
  19. if(arr[p]==k)
  20. { sort(arr+p+1,arr+q+1);
  21. return find(arr,p+1,q,k);
  22. }
  23.  
  24. }
  25.  
  26. }
  27.  
  28. int main()
  29. {
  30. int q, n, sum, i, j, k,count,x;
  31. int arr[100000];
  32. cin >> q;
  33. while(q--){
  34. count=0;
  35. cin >> n >> k;
  36. for(i=0;i<n;i++)
  37. cin >> arr[i];
  38. if(n==1)
  39. { cout<<arr[0]<<"\n";
  40. continue;
  41. }
  42. sort(arr, arr+n);
  43. j=0;
  44. for(i=0;i<n;i++){
  45. if(arr[i]<=k)
  46. j++;
  47. else
  48. break;
  49. }
  50. sum=0;
  51. for(i=0;i<j;i++)
  52. sum+=arr[i];
  53. if(j==n)
  54. { cout<<sum<<"\n";
  55. continue;
  56. }
  57. if(j==n-1)
  58. { cout<<sum+arr[n-1]<<"\n";
  59. continue;
  60. }
  61. for(i=j;i<n-1;i++)
  62. { sum+=k;
  63. count+=arr[i]-k;
  64. }
  65.  
  66. x=find(arr,j,n-2,k);
  67. //cout<<"x="<<x<<"\n";
  68. cout<<sum+arr[n-1]-(x-k)<<"\n";
  69.  
  70. //cout << sum+arr[n-1] << "\n";
  71. }
  72. return 0;
  73. }
Success #stdin #stdout 0.03s 4552KB
stdin
1
50 13
15000 47000 7896 25400 6000 12360 25470 25478 23500 45780 15000 47000 7896 25400 6000 12360 25470 25478 23500 45780 15000 47000 7896 25400 6000 12360 25470 25478 23500 45780 15000 47000 7896 25400 6000 12360 25470 25478 23500 45780
stdout
47506