P1889 士兵站队(洛谷)

给定n个士兵在网格上的位置,求解如何通过最小移动步数让他们排列成水平队列。士兵只能沿网格边移动,同一网格点上不能有多个士兵。输出最少总移动步数。

题目描述
在一个划分成网格的操场上, nn 个士兵散乱地站在网格点上,由整数坐标 (x,y)(x,y) 表示。士兵们可以沿网格边上、下左右移动一步,但在同时刻任一网格点上只能有名士兵。按照军官的命令,们要整齐地列成个水平队列,即排成 队列,即排成 (x,y),(x+1,y), …,(x+n-1,y)(x,y),(x+1,y),…,(x+n−1,y)。请求出如何选择 xx 和 yy 的值才能使士兵们以最少的总移动步数排成一列。

输入格式
输入的第一行是一个整数,代表士兵数 nn。
第 22 到 (n + 1)(n+1) 行,每行 22 个整数,第 (i + 1)(i+1) 行的整数 x_i, y_ix i ,y i代表第 ii 个士兵的坐标。

输出格式
输出一行一个整数,代表答案。
输入输出样例
输入 #1
5
1 2
2 2
1 3
3 -2
3 3
输出 #1
8
说明/提示
对于 100%100% 的数据,保证 1 \leq n \leq 100001≤n≤10000,-10000 \leq x,y \leq 10000−10000≤x,y≤10000。

#include<bits/stdc++.h>
using namespace std;
int x[10500],y[10500];
int main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值