题目描述:
某勇者为了攒够买剑的钱,他决定出去冒险赚钱,勇者需要以某特定顺序经过n个村庄完成任务,请问他走过的路有多长。(勇者初始坐标在(0,0))
输入格式:
第一行为一个正整数n表示有n个村庄;
接下来n行每行两个正整数,分别为每个村庄的坐标x[i],y[i];
最后一行为经过村庄的顺序
输出格式:
一个实数表示勇者经过的距离(保留三位小数)
样例输入:
2 1 4 3 2 2 1
样例输出:
6.434
提示:
n<=20,所有数据均在int范围内。
两点(x1,y1),(x2,y2)的距离公式 sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
时间限制: 1000ms
空间限制: 256MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x[100],y[100],a[100];
double s=0;
cin>>n;
x[0]=0;
y[0]=0;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
}
a[0]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
s=s+sqrt((x[a[i]]-x[a[i-1]])*(x[a[i]]-x[a[i-1]])+(y[a[i]]-y[a[i-1]])*(y[a[i]]-y[a[i-1]]));
}
printf("%.3lf",s);
return 0;
}