zoukankan      html  css  js  c++  java
  • 1416: Kick Ass Biu [几何]

    点击打开链接


    1416: Kick Ass Biu [几何]

    时间限制: 1 Sec 内存限制: 128 MB

    提交: 174 解决: 35 统计

    题目描述

    在玩Kick Ass的时候,可以发现子弹的发射与飞船的移动非常有趣。

    假设屏幕是个[Math Processing Error]n×m(竖直为n,水平为m)的矩形,以矩形左下角为原点,水平方向为x轴,向右为正方向,竖直方向为y轴,像上为正方向,建立平面直角坐标系。你的飞船在(x1,y1)点,射击目标在(x2,y2),你向目标发出了一发子弹,然而由于网页卡顿,这枚子弹并不会触碰到目标。所以,子弹将以每秒v单位的速度继续前进,若子弹移动到屏幕边缘,将自动传送到另一边并继续移动。如:向右移动到(m,0)则下一刻从(0,0)开始继续移动,同理向上移动到(0,n)则下一刻从(0,0)开始继续移动。

    现在给出nm(x1,y1)(x2,y2)v,能否通过编程回答第t秒子弹的坐标?

    输入

    多组测试数据,请处理到文件结束。

    第一行是两个正整数nm

    第二行是六个正整数x1y1x2y2vt

    [Math Processing Error]0<n,m<100000

    [Math Processing Error]0<x1,y1,x2,y2,v,t<100000

    输出

    对于每组测试数据请在一行输出第t秒子弹的坐标xy,中间用一个空格隔开。

    结果四舍五入保留到小数点后一位

    样例输入

    3 3
    1 1 1 2 1 1
    3 3
    1 1 1 2 1 2
    3 3
    1 1 1 2 1 3
    

    样例输出

    1.0 2.0
    1.0 0.0
    1.0 1.0



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include<cstdio>
    #include<cmath>
    double dis(double x1,double y1,double x2,double y2) {
        return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    }
    double change(double x,double t) {
        while(x>=t) {
            x-=t;
        }
        return x;
    }
    double tabs(double m) {
        return m>0?m:-m;
    }
    int main() {
        double n,m;
        while(scanf("%lf %lf",&n,&m)!=EOF) {
            double x1,y1,x2,y2,v,t;
            scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&v,&t);
            double s=v*t;
            double st=dis(x1,y1,x2,y2);
            double lx=tabs(x2-x1)*(s/st);
            if(x2>x1)
                lx=change(lx+x1,m);
            else
                lx=m-change(m-x1+lx,m);
            double ly=tabs(y2-y1)*(s/st);
            if(y2>y1)
                ly=change(ly+y1,n);
            else
                ly=n-change(n-y1+ly,n);
            printf("%.1lf %.1lf ",lx,ly); //四舍五入保留小数点后一位
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1416
        User: BoilTask
        Language: C++
        Result: 正确
        Time:132 ms
        Memory:840 kb
    ****************************************************************/

















    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    Poj 1742 Coins(多重背包)
    Poj 2350 Above Average(精度控制)
    求二进制数中1的个数
    Poj 1659 Distance on Chessboard(国际象棋的走子规则)
    Poj 2411 Mondriaan's Dream(压缩矩阵DP)
    Poj 2136 Vertical Histogram(打印垂直直方图)
    Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
    poj 2390 Bank Interest(计算本利和)
    Poj 2533 Longest Ordered Subsequence(LIS)
    Poj 1887 Testing the CATCHER(LIS)
  • 原文地址:https://www.cnblogs.com/h-hkai/p/7406496.html
Copyright © 2011-2022 走看看