(File IO): input:marathon.in output:marathon.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet
题目描述
地图上有
N
N
N 个城市,一只奶牛要从
1
1
1 号城市开始依次经过
N
N
N 个城市,最终到达
N
N
N 号城市。但是这只奶牛觉得这样太无聊了,所以它决定跳过其中的一个城市(但是不能跳过
1
1
1 号和
N
N
N 号城市),使得它从
1
1
1 号城市开始,到达
N
N
N号城市所经过的总距离最小。每一个城市都有一个坐标,从城市
(
x
1
,
y
1
)
(x1, y1)
(x1,y1)到城市
(
x
2
,
y
2
)
(x2, y2)
(x2,y2) 的距离为
∣
x
1
−
x
2
∣
+
∣
y
1
−
y
2
∣
|x1 - x2| + |y1 - y2|
∣x1−x2∣+∣y1−y2∣。
输入
第一行一个数
N
N
N,表示城市个数
接下一行
N
N
N行每行两个数
x
,
y
x,y
x,y,表示每个城市的坐标
输出
一行一个数
a
n
s
ans
ans, 使得它从
1
1
1 号城市开始,跳过某一个城市,到达
N
N
N 号城市所经过的总距离最小
样例输入
4
0 0
8 3
11 -1
10 0
样例输出
14
数据范围限制
• 对于
40
40
40% 的数据,
N
<
=
1000
N <= 1000
N<=1000。
• 对于
100
100
100% 的数据,
3
<
=
N
<
=
1
0
5
,
−
1
0
3
<
=
x
<
=
1
0
3
,
−
1
0
3
<
=
y
<
=
1
0
3
3 <= N <= 10^5,-10^3 <= x <= 10^3,-10^3 <= y <= 10^3
3<=N<=105,−103<=x<=103,−103<=y<=103。
提示
跳过
2
2
2 号城
解题思路
直接暴力枚举。。。
代码
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,a[100010][3],n,minn,ans,t;
int main(){
freopen("marathon.in","r",stdin);
freopen("marathon.out","w",stdout);
scanf("%d",&n);
minn=2147483647;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i][1],a[i][2]);
t=t+abs(a[i-1][1]-a[i][1])+abs(a[i-1][2]-a[i][2]);
}
for(int i=1;i<=n;i++)
{
ans=s-(abs(a[i][1]-a[i-1][1])+abs(a[i][2]-a[i-1][2]))-(abs(a[i][1]-a[i+1][1])+abs(a[i][2]-a[i+1][2]))+(abs(a[i-1][1]-a[i+1][1])+abs(a[i-1][2]-a[i+1][2]));
if(ans<minn)
minn=ans;
}
printf("%d",minn);
}