POJ2231 Moo Volume 递推 C语言
题目:http://poj.org/problem?id=2231
个人认为这是一道水题……先输入N表示有N头牛,接下来的N个数是各个牛所在的位置。如果一头牛对另一头牛Moo,那么Moo数就是1号牛所在位置i与2号牛所在位置j的差值,又因为1号牛Moo过去,所以2号牛也要Moo回来,于是Moo数就变为2倍了。
还是TLE,后来发现数组似乎开小了,扩大了一下,就AC了。
AC code:
1 #include <stdio.h>
2 #include <math.h>
3 #include <stdlib.h>
4
5 #define MAX 10000 + 100
6
7 int main () {
8 int n; //n的范围1~10,000 int足够
9 long long int num[MAX]; //数据范围0~1,000,000,000 要用long long int才不会溢出
10 long long int sum = 0; //同上
11 int i, j;
12 scanf ("%d", &n);
13 for (i = 1; i <= n; i++)
14 scanf ("%lld", &num[i]); //储存牛的位置
15 for (i = 1; i < n; i++)
16 for (j = i + 1; j <= n; j++)
17 sum += abs(num[i] - num[j]); //累加每两头牛的位置之差
18 printf ("%lld\n", sum * 2); //因为Moo是相对的,有去有回,所以要*2
19 //system ("pause");
20 return 0;
21 }