#177-[枚举,暴力]奶牛狂欢节

Description

每年,Farmer John的n头奶牛都会参加它们盛大的节日“MooFest”。由于节日里气氛太热烈了,奶牛们的叫声使得节日结束后一些奶牛的听力受到了影响。

现在有n头奶牛,第i头奶牛的听力阈值为v(i)(1<=v(i)<=20000),即如果其他奶牛想让这只奶牛听到它的声音,那么至少得发出v(i)乘上它们之间距离这么大的音量。所以如果第i头奶牛和第j头奶牛交谈,那么发出的音量大小至少是它们之间的距离乘上它们两个阈值中的最大值,即max(v(i),v(j))。

现在这n头奶牛站在了一条直线上,每头奶牛都站在唯一的坐标上(在1到20000之间),并且每对奶牛交谈都尽可能降低音量。那么请你计算出这n*(n-1)/2对奶牛交谈产生的最小总音量大小。

Input

输入数据第一行包含一个整数n(1<=n<=20000),代表奶牛的头数。

接下来n行,第i行两个数,第一个数代表奶牛的听力阈值v(i),第二个数代表该奶牛所站的坐标。

Output

一行一个整数,代表最小的总音量。

4
3 1
2 5
2 6
4 3
  • Sample Input

57
  • Sample Output

HINT

【说明】

有30%的数据,n不超过2000。

一看数据范围:N<=20000, N^2算法能过

#include <iostream>
#include <cstdio>
#include <algorithm>

#define SIZE 20010

using namespace std;

struct node // 一只奶牛的信息
{
	int v, d;
};

bool comp(node a, node b) // 排序比较函数
{
	return a.d < b.d;
}

node a[SIZE];

int main(void)
{
	long long res = 0; // 不知道会不会爆 int
	int n, i, j;
	
	scanf("%d", &n);
	for (i = 1; i <= n; ++i)
	{
		scanf("%d%d", &a[i].v, &a[i].d);
	}
	
	sort(a + 1, a + n + 1, comp); // 排序
	for (i = 1; i < n; ++i)
	{
		for (j = i + 1; j <= n; ++j)
		{
			res += (a[j].d - a[i].d) * max(a[i].v, a[j].v); // 加上每只奶牛交谈的音量
		}
	}
	
	printf("%lld", res);
	
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值