Submission #60975553


Source Code Expand

Copy
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Building {
long long x, h;
};
//
bool canSeeAllBuildings(const vector<Building>& buildings, double height) {
double maxSlope = -1e18; //
for (const auto& building : buildings) {
double slope = (building.h - height) / building.x;
if (slope <= maxSlope) {
return false; //
}
maxSlope = max(maxSlope, slope);
}
return true;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;

struct Building {
    long long x, h;
};

// ビルが見えるかどうかを判定
bool canSeeAllBuildings(const vector<Building>& buildings, double height) {
    double maxSlope = -1e18;  // 現時点での最大傾き
    for (const auto& building : buildings) {
        double slope = (building.h - height) / building.x;
        if (slope <= maxSlope) {
            return false;  // 現在のビルが他のビルに遮られる
        }
        maxSlope = max(maxSlope, slope);
    }
    return true;
}

int main() {
    int n;
    cin >> n;
    vector<Building> buildings(n);
    for (int i = 0; i < n; ++i) {
        cin >> buildings[i].x >> buildings[i].h;
    }

    // 高さを二分探索
    double low = 0.0, high = 1e9, result = -1.0;
    const double eps = 1e-9;

    while (high - low > eps) {
        double mid = (low + high) / 2.0;
        if (canSeeAllBuildings(buildings, mid)) {
            high = mid;  // 高さを下げられる
            result = mid;
        } else {
            low = mid;   // 高さを上げる必要がある
        }
    }

    if (canSeeAllBuildings(buildings, 0.0)) {
        cout << -1 << endl;  // 高さ 0 で全てのビルが見える場合
    } else {
        cout << fixed << setprecision(18) << result << endl;
    }

    return 0;
}

Submission Info

Submission Time
Task F - Visible Buildings
User VIP1109
Language C++ 20 (gcc 12.2)
Score 0
Code Size 1454 Byte
Status WA
Exec Time 2207 ms
Memory 6308 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 525
Status
AC × 4
AC × 8
WA × 18
TLE × 1
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
All hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
Case Name Status Exec Time Memory
hand_01.txt WA 1 ms 3560 KiB
hand_02.txt AC 1 ms 3432 KiB
hand_03.txt WA 1 ms 3680 KiB
hand_04.txt AC 1 ms 3488 KiB
random_01.txt WA 97 ms 6308 KiB
random_02.txt WA 72 ms 5540 KiB
random_03.txt WA 62 ms 5316 KiB
random_04.txt WA 32 ms 4160 KiB
random_05.txt WA 71 ms 5500 KiB
random_06.txt WA 36 ms 4156 KiB
random_07.txt WA 13 ms 3860 KiB
random_08.txt WA 49 ms 4752 KiB
random_09.txt WA 7 ms 3688 KiB
random_10.txt WA 21 ms 3924 KiB
random_11.txt WA 62 ms 5212 KiB
random_12.txt WA 44 ms 4584 KiB
random_13.txt WA 12 ms 3856 KiB
random_14.txt WA 24 ms 3900 KiB
random_15.txt WA 86 ms 5480 KiB
random_16.txt AC 70 ms 5372 KiB
random_17.txt AC 51 ms 4776 KiB
random_18.txt WA 70 ms 5476 KiB
random_19.txt TLE 2207 ms 5072 KiB
sample_01.txt AC 1 ms 3760 KiB
sample_02.txt AC 1 ms 3572 KiB
sample_03.txt AC 1 ms 3560 KiB
sample_04.txt AC 1 ms 3860 KiB


2025-06-07 (Sat)
10:18:46 +09:00