Skip to content

Instantly share code, notes, and snippets.

@zsrinivas
Created May 26, 2014 12:56
Show Gist options
  • Save zsrinivas/cc06fa6d1718768e1194 to your computer and use it in GitHub Desktop.
Save zsrinivas/cc06fa6d1718768e1194 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <ctype.h>
#define MAX_LENGTH 100000
int fact(int num);
long long int mergedivide(long long int a[], long long int low, long long int high);
long long int mergeconquer(long long int a[], long long int low, long long int mid, long long int high);
long long int mergeconquer(long long int a[], long long int low, long long int mid, long long int high)
{
long long int b[MAX_LENGTH];
long long int i = low, j = mid + 1, k = 0;
while (i <= mid && j <= high)
{
if (a[i] <= a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
while (i <= mid)
b[k++] = a[i++];
while (j <= high)
b[k++] = a[j++];
k--;
while (k >= 0) {
a[low + k] = b[k];
k--;
}
return 0;
}
long long int mergedivide(long long int a[], long long int low, long long int high)
{
long long int m;
if (low < high)
{
m = (high + low)/2;
mergedivide(a, low, m);
mergedivide(a, m + 1, high);
mergeconquer(a, low, m, high);
}
return 0;
}
int fact(int num)
{
int pint=num;
while(--num)
pint*=num;
return pint;
}
int main()
{
int i, k, n,fac,rem,j;
long long int c[102],sum=0,pint,pont;
scanf("%d%d", &n, &k);
for(i=0; i<n; i++)
scanf("%lld", &c[i]);
fac=n/k;
rem=n%k;
mergedivide(c,0,n-1);
i=0;
pont=n-1;
for (i = 0; i < fac; ++i)
{
pint=k;
while(pint--)
{
c[pont]=(i+1)*c[pont];
pont--;
}
}
while(rem--)
{
c[rem]=(i+1)*c[rem];
}
for (i = 0; i < n; ++i)
{
sum+=c[i];
}
printf("%lld\n", sum);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment