Rezultati

Up. imeNalogaJezikRezultatČas oddaje
Aquasonic-2018 Fruit Ninja C++ 0/100Napačen odgovor (WA) 13. okt '18 @ 11:43

Test Točke Porabljen spomin Porabljen čas Status
#1 11/11 3,203 MiB 0,004 s OK
#2 11/11 3,160 MiB 0,004 s OK
#3 11/11 3,203 MiB 0,000 s OK
#4 0/11 3,434 MiB 0,000 s Napačen odgovor
Tvoj izhod:
​990
<<<EOF>>>
Pravilen izhod:
​299
<<<EOF>>>
#5 0/11 3,035 MiB 0,010 s Napačen odgovor
Tvoj izhod:
​193
<<<EOF>>>
Pravilen izhod:
​199
<<<EOF>>>
#6 0/11 3,434 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​885
<<<EOF>>>
Pravilen izhod:
​37
<<<EOF>>>
#7 0/11 3,219 MiB 0,010 s Napačen odgovor
Tvoj izhod:
​710
<<<EOF>>>
Pravilen izhod:
​236
<<<EOF>>>
#8 0/11 3,438 MiB 0,000 s Napačen odgovor
Tvoj izhod:
​998
<<<EOF>>>
Pravilen izhod:
​0
<<<EOF>>>
#9 0/12 3,434 MiB 0,010 s Napačen odgovor
Tvoj izhod:
​161
<<<EOF>>>
Pravilen izhod:
​638
<<<EOF>>>

Ocenjevani program (main.cpp):
#include <bits/stdc++.h>

#define f first
#define s second
#define pb push_back
#define mp make_pair

#define INF (1 << 30)

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<pii, int> piii;

#define EPS 0.00001

const int maxn = 2e5 + 17;

ld k, n;
int ans;
int N;
int XA, YA, XB, YB;
piii in[maxn];

bool ok(int i)
{
    int x0 = in[i].f.f, y0 = in[i].f.s, r = in[i].s;

    ld a = 1.0 + k * k;
    ld b = 2.0 * k * (n - y0) - 2.0 * x0;
    ld c = (ld) 1.0 * x0 * x0 + 1.0 * (n - y0) * (n - y0) - 1.0 * r * r;

    /// cout << b * b - 4.0 * a * c << endl;
    ld x1 = -b - sqrt(b * b - 4.0 * a * c);
    ld x2 = -b + sqrt(b * b - 4.0 * a * c);

    x1 /= 2.0 * a;
    x2 /= 2.0 * a;

   /// cout << fixed << setprecision(10);
///    cout << i << " " << x1 << " " << x2 << " " << ((x1 - (ld) 1.0 * XA) >= EPS && ((ld) 1.0 * XB - x1) >= EPS || (x2 - (ld) 1.0 * XA) >= EPS && ((ld) 1.0 * XB - x2) >= EPS) << endl;

    return !(((x1 - (ld) 1.0 * XA) < EPS || ((ld) 1.0 * XB - x1) < EPS) &&
           ((x2 - (ld) 1.0 * XA) < EPS || ((ld) 1.0 * XB - x2) < EPS));
}

bool comp(ld a, ld b)
{
    return !(a > b);
}

int main()
{
    ios_base::sync_with_stdio(false);

    /// IF NAGORE
    /// IF POLA GO SECI

    cin >> XA >> YA >> XB >> YB;
    if (YB < YA) swap(XA, XB), swap(YA, YB);
    cin >> N;
    for (int i = 1; i <= N; i++) cin >> in[i].f.f >> in[i].f.s >> in[i].s;

    if (XA == XB) {
        for (int i = 1; i <= N; i++) {
            int x0 = in[i].f.f, y0 = in[i].f.s, r = in[i].s;

            int gore = y0 + r;
            int dolu = y0 - r;

            if (comp(x0 - r, XA) && comp(XA, x0 + r)) {
                if ((comp(y0 - r, YA) && comp(YA, y0 + r) || comp(y0 - r, YB) && comp(YB, y0 + r))) ans++;
            }

        }

        cout << ans << endl;
        return 0;
    }

    k = (ld) (YA - YB) / (ld) (XA - XB);
    n = -1.0 * k * XA + YA;

    /// cout << k << " " << n << endl;

    for (int i = 1; i <= N; i++)
        if (ok(i)) ans++;

    cout << ans << endl;



    return 0;
}