QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#863032#9668. Isoball: 2D VersionAlinteckQRTL 0ms0kbC++202.9kb2025-01-19 11:58:252025-01-19 11:58:26

Judging History

你现在查看的是最新测评结果

  • [2025-01-19 11:58:26]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2025-01-19 11:58:25]
  • 提交

answer

#include <iostream>
#include <math.h>
#include <numbers>

using namespace std;

long double PI = std::numbers::pi;

long int n;
double   xo, yo, r, vx, vy, ix1, iy1, ix2, iy2;

double trans(double dx1, double dy1, double dx2, double dy2)
{
    if (dy2 - dy1 == 0 || dx2 -dx1 ==0)
    {
        while(1);
    }
    double res = atan2(dy2 - dy1, dx2 - dx1);
    if (res < 0)
    {
        res += 2 * PI;
    }
    return res;
}

double tk(double tx1, double ty1, double tx2, double ty2)
{
    return (ty2 - ty1) / (tx2 - tx1);
}

int main()
{
    cin >> n;
    while (n--)
    {
        cin >> xo >> yo >> r >> vx >> vy >> ix1 >> iy1 >> ix2 >> iy2;
        if (ix2 - ix1 < 2 * r || iy2 - iy1 < 2 * r)
        {
            cout << "No" << endl;
            continue;
        }
        double nx1 = ix1 + r;
        double ny1 = iy1 + r;
        double nx2 = ix2 - r;
        double ny2 = iy2 - r;

        double xt, yt;

        xt = xo + 1000000 * vx;
        yt = yo + 1000000 * vy;

        // cout <<xt<<" " <<yt<<endl;

        double dt  = trans(xo, yo, xt, yt);
        double d11 = trans(xo, yo, nx1, ny1);
        double d12 = trans(xo, yo, nx1, ny2);
        double d21 = trans(xo, yo, nx2, ny1);
        double d22 = trans(xo, yo, nx2, ny2);
        /*cout << dt / PI << endl;
        cout << d11 / PI << endl;
        cout << d12 / PI << endl;
        cout << d21 / PI << endl;
        cout << d22 / PI << endl;*/

        if (ny1 <= yo && yo <= ny2)
        {
            // cout << "?" << endl;
            if (xo < nx1)
            {
                if ((d11 <= dt && d11 <= 2) || (dt <= d12 && dt >= 0))
                {
                    cout << "Yes" << endl;
                }
                else
                {
                    cout << "No" << endl;
                }
            }
            else if (nx2 < xo)
            {
                if (dt <= d11 && dt >= d12)
                {
                    cout << "Yes" << endl;
                }
                else
                {
                    cout << "No" << endl;
                }
            }
            else
            {
                cout << "Yes" << endl;
            }
        }
        else if (yo < ny1)
        {
            // cout<<"?"<<endl;
            if (max(max(d11, d22), max(d12, d21)) >= dt && min(min(d11, d22), min(d12, d21)) <= dt)
            {
                cout << "Yes" << endl;
            }
            else
            {
                cout << "No" << endl;
            }
        }
        else if (yo > ny2)
        {
            // cout<<"? "<<endl;
            if (max(max(d11, d22), max(d12, d21)) >= dt && min(min(d11, d22), min(d12, d21)) <= dt)
            {
                cout << "Yes" << endl;
            }
            else
            {
                cout << "No" << endl;
            }
        }
    }
    return 0;
}

详细

Test #1:

score: 0
Time Limit Exceeded

input:

5
0 0 1 1 0
2 -2 6 2
0 0 1 1 0
2 0 6 2
0 0 1 1 1
1 1 3 3
0 0 1 -1 -1
1 1 3 3
0 0 1 -1 1
-5 -5 5 5

output:


result: