답안 #1050933

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1050933 2024-08-09T17:01:27 Z Itamar Sky Walking (IOI19_walk) C++14
10 / 100
4000 ms 226496 KB
using namespace std;
#include <bits/stdc++.h>
#define ll long long
#define vll vector<ll>
#define pll pair<ll,ll>
#define pi pair<ll,ll>
#define vi vector<int>
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) {
	int n = x.size(), m = l.size();
    map<pi,vector<pi>> fr;
    /*multiset<pi> poi;
    vector<vector<pi>> ins(2e5+2);
    vector<vector<pi>> rem(2e5+2);
    for(int i = 0; i < m; i++){
        ins[l[i]].push_back({y[i],i});
        rem[r[i]].push_back({y[i],i});
    }
    map<int,int> prev;
    for(int i = 0; i < n; i++){
        for(pi hei : ins[i])poi.insert(hei);
        pi bel = {x[i],0};
        auto it = poi.begin();
        while(it!=poi.end() && (*it).first <= h[i]){
            int cur = (*it).first;
            pi p = {x[i],cur};
            fr[p].push_back(bel);
            fr[bel].push_back(p);
            if(l[(*it).second]!=i){
                fr[p].push_back({prev[cur],cur});
                fr[{prev[cur],cur}].push_back(p);
            }
            prev[cur]=x[i];
            bel = p;
            it++;
        }
        for(pi hei : rem[i])poi.erase(poi.find(hei));
    }*/
    map<pi,ll> dp;
    dp[{x[g],0}]=1e18;
    dp[{x[s],0}]=0;
    for(int i = 0; i < m; i++){
        for(int j = l[i]; j <=r[i]; j++){
            for(int k = l[i]; k <= r[i]; k++){
                if(y[i] <= h[j] && y[i] <= h[k]){
                    fr[{x[j],y[i]}].push_back({x[k],y[i]});
                    dp[{x[j],y[i]}]=1e18;
                }
            }
        }
    }
    for(auto[a,b] : dp){
        for(auto [c,d] : dp){
            if(c.first == a.first)fr[a].push_back(c);
        }
    }
    set<pair<ll,pi>> se;
    map<pi,bool> vis;
    se.insert({0,{x[s],0}});
    while(!se.empty()){
        pair<ll,pi> p = *se.begin();
        pi q = p.second;
        se.erase(se.begin());
        if(vis[q])continue;
        vis[q]=1;
        for(pi f : fr[q]){
            if(vis[f])continue;
            ll w = dp[q] + (abs(f.first-q.first)+abs(f.second-q.second));
            se.insert({w,f});
            dp[f] = min(dp[f],w);
        }
    }
    if(dp[{x[g],0}]==0 || dp[{x[g],0}]>=1e16)return -1;
    return dp[{x[g],0}];
}

Compilation message

walk.cpp: In function 'long long int min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:51:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   51 |     for(auto[a,b] : dp){
      |             ^
walk.cpp:52:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   52 |         for(auto [c,d] : dp){
      |                  ^
walk.cpp:9:6: warning: unused variable 'n' [-Wunused-variable]
    9 |  int n = x.size(), m = l.size();
      |      ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 7 ms 1116 KB Output is correct
6 Correct 5 ms 860 KB Output is correct
7 Correct 5 ms 948 KB Output is correct
8 Correct 4 ms 884 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 12 ms 1372 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 344 KB Output is correct
13 Correct 0 ms 436 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 10 ms 1700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Execution timed out 4099 ms 226496 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4080 ms 18192 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4080 ms 18192 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 7 ms 1116 KB Output is correct
6 Correct 5 ms 860 KB Output is correct
7 Correct 5 ms 948 KB Output is correct
8 Correct 4 ms 884 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 12 ms 1372 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 344 KB Output is correct
13 Correct 0 ms 436 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 10 ms 1700 KB Output is correct
18 Correct 0 ms 344 KB Output is correct
19 Correct 1 ms 344 KB Output is correct
20 Execution timed out 4099 ms 226496 KB Time limit exceeded
21 Halted 0 ms 0 KB -