답안 #552216

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
552216 2022-04-22T19:08:04 Z PiejanVDC Sky Walking (IOI19_walk) C++17
0 / 100
4000 ms 92672 KB
#include<bits/stdc++.h>
using namespace std;

#include "walk.h"

long long min_distance(std::vector<int> x, std::vector<int> h, std::vector<int> l, std::vector<int> r, std::vector<int> y, int s, int g) {
    const long long n = (long long)x.size();
    const long long m = (long long)l.size();

    vector<set<long long>>v(n);

    v[g].insert(0);

    set<pair<long long,pair<long long,long long>>>connected;

    for(long long i = 0 ; i < m ; i++) {
        for(long long ii = l[i] ; ii <= r[i] ; ii++) {
            if(ii < r[i])
                connected.insert({y[i], {ii, ii+1}});
            v[ii].insert(y[i]);
        }
    }

    map<pair<long long,long long>,long long>dist;

    priority_queue<pair<long long,pair<long long,long long>>>pq;
    pq.push({0,{s,0}});

    while(!pq.empty()) {
        auto node = pq.top();
        pq.pop();
        auto [i,y] = node.second;
        if(i > 0 && v[i-1].count(y) && connected.count({y, {i-1,i}})) {
            if((!dist.count({i-1,y}) || dist[{i,y}] + i - x[i-1] < dist[{i-1,y}])) {
                dist[{i-1,y}] = dist[{i,y}] + x[i] - x[i-1];
                pq.push({-dist[{i-1,y}], {i-1, y}});
            }
        }
        if(i < n-1 && v[i+1].count(y) && connected.count({y, {i,i+1}})) {
            if((!dist.count({i+1,y}) || dist[{i,y}] + x[i+1] - i < dist[{i+1,y}])) {
                dist[{i+1,y}] = dist[{i,y}] + x[i+1] - x[i];
                pq.push({-dist[{i+1,y}], {i+1, y}});
            }
        }
        for(auto it = v[i].begin() ; it != v[i].end() ; it++) {
            long long yy = *it;
            if(yy > h[i] || y > h[i])
                break;
            if(!dist[{i,yy}] || dist[{i,y}] + abs(y - yy) < dist[{i,yy}]) {
                dist[{i,yy}] = dist[{i,y}] + abs(y - yy);
                pq.push({-dist[{i,yy}], {i, yy}});
            }
        }
    }
    return dist[{g,0}];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 308 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Incorrect 1 ms 212 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 304 KB Output is correct
3 Execution timed out 4067 ms 92672 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4058 ms 10140 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4058 ms 10140 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 308 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Incorrect 1 ms 212 KB Output isn't correct
4 Halted 0 ms 0 KB -