洛谷U1404 find

题目描述 Description

给定平面上n个OIer和n台电脑,每个OIer只能水平向右和竖直向下,找到一台电脑写代码,其花费为OIer与电脑之间的曼哈顿距离(|x_i-x_j|+|y_i-y_j|)。
求出使n个OIer均找到自己电脑的最小花费。
输入输出格式 Input/output
输入格式:
输入第1行有一个整数n,表示点的个数。
接下来有n行,第i行包括两个用空格隔开的整数x_i,y_i,表示第i个OIer的位置;
接下来有n行,第i行包括两个用空格隔开的整数x_i,y_i,表示第i台电脑的位置。
输出格式:
输出1个整数,表示最小花费。
输入输出样例 Sample input/output
样例测试点#1 输入样例:
2
1 2
1 3
2 2
2 3
输出样例:
2
说明 description
对于样例,第一个OIer寻找到第一台电脑,第二个OIer寻找到第二台电脑。
最小花费为|2-1|+|2-2|+|2-1|+|3-3|=2。
对于30%的数据,保证2≤n≤50;
对于60%的数据,保证2≤n≤10^3;
对于100%的数据,保证2≤n≤5×10^4,0≤x_i≤100000,0≤y_i≤100000。
对于100%的数据,保证一定有解。

解题思路

这个题是水水的~但是看清题目是关键。题目中保证题目一定有解而且OIer只能向右或者向下走。用a【i】表示OIer的位置,b【i】表示电脑的位置。那么(b【i】.x-a【i】.x )>=0
且(a【i】.y-b【i】.y)>=0。。。什么鬼曼哈顿距离,什么鬼最小距离,都是唬人的好不好!。。。。边读入边计算即可解决此问题

代码

var i,n,a,b:longint;
    ans:int64;
begin
  readln(n);
  for i:=1 to n do
    begin
      readln(a,b);
      ans:=ans-a+b;
    end;
  for i:=1 to n do
    begin
      readln(a,b);
      ans:=ans+a-b;
    end;
  write(ans);

end.

 评测结果 Result
测试点 #1:通过该测试点。 得分10,耗时0ms,内存3108kB。
测试点 #2:通过该测试点。 得分10,耗时0ms,内存3108kB。
测试点 #3:通过该测试点。 得分10,耗时0ms,内存3096kB。
测试点 #4:通过该测试点。 得分10,耗时0ms,内存3108kB。
测试点 #5:通过该测试点。 得分10,耗时31ms,内存3137kB。
测试点 #6:通过该测试点。 得分10,耗时15ms,内存3133kB。
测试点 #7:通过该测试点。 得分10,耗时15ms,内存3133kB。
测试点 #8:通过该测试点。 得分10,耗时62ms,内存3133kB。
测试点 #9:通过该测试点。 得分10,耗时46ms,内存3137kB。
测试点 #10:通过该测试点。 得分10,耗时31ms,内存3133kB。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值