Submission #703100

#TimeUsernameProblemLanguageResultExecution timeMemory
703100CyanmondBuilding Skyscrapers (CEOI19_skyscrapers)C++17
54 / 100
463 ms15808 KiB
#include <bits/stdc++.h>

struct Point {
    int r, c;
};
auto compPoint = [](Point a, Point b) {
    return std::make_pair(a.r, a.c) < std::make_pair(b.r, b.c);
};

std::pair<int, int> dxy[8] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}};

int main() {
    int N, T;
    std::cin >> N >> T;
    std::vector<Point> sks(N);
    for (auto &[r, c] : sks) {
        std::cin >> r >> c;
    }
    std::map<Point, int, decltype(compPoint)> skMap(compPoint);
    for (int i = 0; i < N; ++i) {
        skMap[sks[i]] = i;
    }

    std::vector<bool> isSeen(N);
    std::vector<int> answer;
    std::priority_queue<Point, std::vector<Point>, decltype(compPoint)> que(compPoint);
    int minV = 0;
    for (int i = 1; i < N; ++i) {
        if (compPoint(sks[i], sks[minV])) {
            minV = i;
        }
    }
    que.push(sks[minV]);
    isSeen[minV] = true;
    while (not que.empty()) {
        const auto [r, c] = que.top();
        que.pop();
        const int f = skMap[{r, c}];
        answer.push_back(f);
        for (const auto &[ar, ac] : dxy) {
            const int nr = r + ar, nc = c + ac;
            auto itr = skMap.find({nr, nc});
            if (itr == skMap.end()) {
                continue;
            }
            const int t = itr->second;
            if (isSeen[t]) {
                continue;
            }
            isSeen[t] = true;
            que.push({nr, nc});
        }
    }

    if (answer.size() != N) {
        std::cout << "NO" << std::endl;
        return 0;
    }
    std::cout << "YES" << std::endl;
    for (const auto e : answer) {
        std::cout << e + 1 << std::endl;
    }
}

Compilation message (stderr)

skyscrapers.cpp: In function 'int main()':
skyscrapers.cpp:55:23: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   55 |     if (answer.size() != N) {
      |         ~~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...