5. 随风而动V2
题目ID:9357拓展题100分
最新提交:
Wrong Answer
20 分
历史最高:
Wrong Answer
30 分
时间限制: 1000ms
空间限制: 262144kB
题目描述
【题目描述】
maoge被困在了一个二维坐标平面上。x轴正方向为东,y轴正方向为北。
给出起点和终点的坐标。接下来10个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。如果无法偏移至终点,输出“-1”。
【数据格式】
输入第一行四个数x1,y1,x2,y2,表示起点和终点(0<=x1,x2<=10,0<=y1,y2<=10)。
10个字符,用空格隔开,表示接下来10个时刻的风向(E表示东,S表示南,W表示西,N表示北)。
输出一个数,最小时间,或者-1。
样例输入:
0 0 4 6
E E E E N N N N N N
样例输出:
10
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[10];
int x1,y1,x2,y2,yE,xS,zW,sN;
cin>>x1>>y1>>x2>>y2;
for(int i=0;i<10;i++){
cin>>a[i];
if(a[i]=='E')yE++;
else if(a[i]=='S')xS++;
else if(a[i]=='W')zW++;
else if(a[i]=='N')sN++;
}
if(abs(x1-x2)+abs(y1-y2)>10){
cout<<-1;
return 0;
}
if(x1<x2&&y1<y2){
if(x2-x1<=yE&&y2-y1<=sN){
cout<<(x2-x1)+(y2-y1);
return 0;
}else cout<<-1;
}else if(x1>x2&&y1<y2){
if(x1-x2<=zW&&y2-y1<=sN){
cout<<(x1-x2)+(y2-y1);
return 0;
}else cout<<-1;
}else if(x1<x2&&y1>y2){
if(x2-x1<=yE&&y1-y2<=xS){
cout<<(x2-x1)+(y1-y2);
return 0;
}else cout<<-1;
}else if(x1>x2&&y1>y2){
if(x1-x2<=zW&&y1-y2<=xS){
cout<<(x2-x1)+(y1-y2);
return 0;
}else cout<<-1;
}
}