思维题 飞行器

链接:https://ac.nowcoder.com/acm/contest/1168/F
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述


在复杂的环境下航迹快速规划是智能飞行器的一个重要课题,为了简单起见,飞行器只能在x轴方向或者y轴方向中飞行,且在x轴正方向中每飞行1米则会产生t米的误差(即在x轴上多飞t米),同理在y轴方向中,每飞行1米则会产生t米的误差(即在y轴上多飞t米,多飞的距离不会再次产生误差)因为站台空间有限,当飞行器在x轴平面与y轴平面的误差大于某值时,飞行器将不能安全降落在站台,从而摧毁。(起点的误差为0。x轴,y轴误差极限分别为SX,SY)。

 

       为了解决该问题,欧涛提出在飞行器的路径中分别建立n个点(蓝点或红点),其中蓝点用于将x轴平面误差清零,红点用于将y轴平面误差清零。这样操作,就能解决误差问题。


输入描述:

第1行输入一个整数T,表示测试次数。

每组测试样例的第一行都包含四个整数,分别为t,SX,SY,n。

每组测试样例的2到2+n-1行,每行三个数ai,bi,d(代表站台坐标(ai,bi),其中d为站台类别,若d为0,则该站台为x轴误差清零点;d为1则为y轴误差清零点)

(第一个输入的站台为起点,最后输入的站台为终点,站台输入顺序为飞行器经过站台顺序)

输出描述:

如果飞行器能正常到达终点,输出“YES”(没有双引号),否则输出“NO”(没有双引号)。
示例1

输入

复制
3
1 629 5 6
20 90 0
29 39 0
46 76 0
52 48 1
79 37 1
82 83 0

1 258 650 4
39 91 1
52 90 1
62 33 0
69 68 0

3 501 449 1
100 47 1

输出

复制
NO
YES
YES

说明

对于第二个样例:

t=1,SX=258,SY=650,n=4

起点(39,91),此时的x与y的误差都是0

起点到第二个站台: x轴多飞(52-39)*1米,y轴多飞 -(90-91)*1米,站台类型为1,y轴误差清零

第二个站台到第三个站台: x轴多飞 (62-52)*1米,y轴多飞 -(33-90)*1米,站台类型为0,x轴误差清零

第三个站台到第四个站台: x轴多飞 (69-62) *1米,y轴多飞 (68-33)*1米,站台类型为0,x轴误差清零

因为飞行过程中,x轴与y轴的误差都不大于他的极限(SX或SY),所以可以正常到终点,输出YES

备注:

数据范围:

0< t,SX,SY,n,ai,bi < 666
细节!!! 题目没说是整数,因此是浮点数;
题目中的误差是飞机多飞的量,而不是坐标相对的量,因此要求绝对值;
#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;

int T;
int t,sx,sy,n,d[1000];
double a[1000],b[1000];

double s(int a){
    if(a<0){
        return -a;
    }else{
        return a;
    }
}

int main(){
    scanf("%d",&T);
    while(T--){
        int flag=0;
        scanf("%d%d%d%d",&t,&sx,&sy,&n);
        double tx=0,ty=0;
        for(int i=1;i<=n;i++){
            scanf("%lf%lf%d",&a[i],&b[i],&d[i]);
        }
        for(int i=2;i<=n;i++){
            tx+=s((a[i]-a[i-1])*t);
            ty+=s((b[i]-b[i-1])*t);
            if(tx>sx||ty>sy){
                flag=1;
                printf("NO\n");
                break;
            }
            if(d[i]==0){
                tx=0;
            }else if(d[i]==1){
                ty=0;
            }
        }
        if(flag==0){
            printf("YES\n");
        }
    }
    return 0;
} 

猜你喜欢

转载自www.cnblogs.com/qqshiacm/p/11872766.html