(纪中)2189. marathon

(File IO): input:marathon.in output:marathon.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet


题目描述
地图上有 N N 个城市,一只奶牛要从 1 1 号城市开始依次经过 N N 个城市,最终到达 N N 号城市。但是这只奶牛觉得这样太无聊了,所以它决定跳过其中的一个城市(但是不能跳过 1 1 号和 N N 号城市),使得它从 1 1 号城市开始,到达 N N 号城市所经过的总距离最小。每一个城市都有一个坐标,从城市 ( x 1 , y 1 ) (x1, y1) 到城市 ( x 2 , y 2 ) (x2, y2) 的距离为 x 1 x 2 + y 1 y 2 |x1 - x2| + |y1 - y2|


输入
第一行一个数 N N ,表示城市个数
接下一行 N N 行每行两个数 x , y x,y ,表示每个城市的坐标

输出
一行一个数 a n s ans , 使得它从 1 1 号城市开始,跳过某一个城市,到达 N N 号城市所经过的总距离最小


样例输入
4
0 0
8 3
11 -1
10 0

样例输出
14


数据范围限制
• 对于 40 40 % 的数据, N < = 1000 N <= 1000
• 对于 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


提示
跳过 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);
}
发布了119 篇原创文章 · 获赞 8 · 访问量 4930

猜你喜欢

转载自blog.csdn.net/kejin2019/article/details/104685142