POJ 2231 Moo Volume 快排

POJ 2231 Moo Volume 快排

思路:
先快排,然后用公式计算出总的volume值。

#include  < stdio.h >

typedef unsigned __int64 u64;

__inline 
void  swap(u64  * a, u64  * b)
{
    u64 t 
= *a;
    
*= *b;
    
*= t;
}


void  qs(u64  * arr,  int  len)
{
    
int p, r, l;

    
if (len < 2)
        
return ;

    l 
= 0;
    r 
= len - 2;
    p 
= len - 1;
    
while (1{
        
while (l < p && arr[l] < arr[p])
            l
++;
        
while (r >= 0 && arr[r] >= arr[p])
            r
--;
        
if (l > r)
            
break;
        swap(
&arr[l], &arr[r]);
    }

    swap(
&arr[l], &arr[p]);

    qs(arr, l);
    qs(arr 
+ l + 1, len - l - 1);
}


u64 
in [ 10024 ];
int  N;

int  main()
{
    
int i;
    u64 s;

    freopen(
"e:\\test\\in.txt""r", stdin);

    scanf(
"%d"&N);
    
for (i = 0; i < N; i++)
        scanf(
"%llu"&in[i]);
    qs(
in, N);

    s 
= 0;
    
for (i = 1; i <= N - 1; i++
        s 
+= 2 * i * (N - i) * (in[i] - in[i - 1]);
    printf(
"%llu\n", s);

    
return 0;
}

你可能感兴趣的:(POJ 2231 Moo Volume 快排)