C Program
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int cmp(const void *a, const void *b){
long long x=*(long long*)a, y=*(long long*)b;
return (x>y)-(x<y);
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,i;
scanf("%d %d",&n,&m);
long long a[100005];
for(i=0;i<n;i++) scanf("%lld",&a[i]);
qsort(a,n,sizeof(long long),cmp);
if(a[0]>a[1]){ long long tmp=a[0];a[0]=a[1];a[1]=tmp; }
/* Extract the two key boundary gaps using a loop of 2 */
double gaps[2];
for(i=0;i<2;i++){
gaps[i] = (i==0) ? (double)(a[1]-a[0]) : (double)(a[n-1]-a[n-2]);
}
double D = (double)(a[n-1]-a[0]);
double perim = 4.0*D - (2.0-sqrt(2.0))*(gaps[0]+gaps[1]);
long long cost = (long long)ceil(perim) * (long long)m;
printf("%lld\n",cost);
}
return 0;
}
0 Comments