糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

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;
}

posted on 2010-02-27 13:48 糯米 阅读(191) 评论(0)  编辑 收藏 引用 所属分类: POJ


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理