(Jizhong)2189.マラソン

(ファイルIO):入力:marathon.in出力:marathon.out
制限時間:1000msのスペースの制約:262144キロバイトの特定の制限
後藤ProblemSet


タイトル説明
地図上にあり N N 都市、牛から 1 1 順次経由ナンバー市 N N 都市、そして最後に N N 都市の数。しかし、唯一の牛が、これはあまりにも退屈だと思うので、スキップ(ただし都市をスキップすることを決定しました 1 1 番号と N N ようなそれから、その番号の変更)、 1 1 ナンバー市が到着し始めました N N 都市の最小数の合計距離が通ります。すべての都市は都市から、座標ました バツ 1 1 (X1、Y1) 都市へ バツ 2 2 (X2、Y2) 距離 | バツ 1 - バツ 2 | + | 1 - 2 | | X1 - X2 | + | Y1 - Y2 |


入力した
最初の行の数を N N 、都市の数である
次の行に N N それぞれの行二列 バツ X、Y 、各都市の座標を表します

出力
ラインaの数 A n個 S からそのような、 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