Submission #212693

# Submission time Handle Problem Language Result Execution time Memory
212693 2020-03-24T06:31:11 Z SorahISA Jakarta Skyscrapers (APIO15_skyscraper) C++17
0 / 100
76 ms 111096 KB
// #pragma GCC target("avx2")
#pragma GCC optimize("O3", "unroll-loops")
 
// #include <bits/extc++.h>
// using namespace __gnu_pbds;
 
#include <bits/stdc++.h>
using namespace std;
 
// #define int long long
#define double long double
// template <typename T>
// using pbds_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
using pii = pair<int, int>;
template<typename T>
using prior = priority_queue<T, vector<T>, greater<T>>;
template<typename T>
using Prior = priority_queue<T>;
 
#define X first
#define Y second
#define ALL(x) (x).begin(), (x).end()
#define eb emplace_back
#define pb push_back
 
#define fastIO() ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define RANDOM() random_device __rd; \
                 mt19937 __gen = mt19937(__rd()); \
                 uniform_int_distribution<int> __dis(0, 1); \
                 auto rnd = bind(__dis, __gen);
 
const int INF = 1E9;
const int mod = 1E9 + 7;
const int maxn = 2000 + 5;
const int maxm = 2000 + 5;

vector<pii> adj[maxn * maxm];
vector<int> dis(maxn * maxm, INF);
vector<bool> vis(maxn * maxm, 0);
prior<pii> pq;

void dijkstra(int now) {
    for (auto [id, cost] : adj[now]) {
        if (vis[id]) continue;
        if (dis[now] + cost < dis[id]) {
            dis[id] = dis[now] + cost;
            pq.push({dis[id], id});
        }
    }
    
    while (!pq.empty()) {
        auto [cost, id] = pq.top(); pq.pop();
        if (!vis[id]) vis[id] = 1, dijkstra(id);
    }
}

int32_t main() {
    fastIO();
    
    int n, m, b, p;
    cin >> n >> m;
    
    vector<pii> v;
    for (int i = 0; i < m; ++i) cin >> b >> p, v.eb(b, p);
    
    if (v[0].X == v[1].X) {
        cout << 0 << "\n";
        return 0;
    }
    
    auto tr = [&](int x, int y) {
        return x*n + y;
    };
    
    for (int i = 0; i < m; ++i) {
        for (int j = v[i].X%v[i].Y; j+v[i].Y < n; j += v[i].Y) {
            adj[tr(i, j)].eb(tr(i, j+v[i].Y), 1);
            adj[tr(i, j+v[i].Y)].eb(tr(i, j), 1);
        }
    }
    
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < m; ++j) {
            if (i == j) continue;
            if ((v[i].X - v[j].X%v[j].Y) % v[j].Y == 0) {
                adj[tr(j, v[i].X)].eb(tr(i, v[i].X), 0);
            }
        }
    }
    
    /*
    for (int pl = 0; pl < n; ++pl) {
        for (int i = 0; i < m; ++i) {
            for (int j = i+1; j < m; ++j) {
                if ((pl - v[i].X%v[i].Y) % v[i].Y == 0 and
                    (pl - v[j].X%v[j].Y) % v[j].Y == 0) {
                    adj[tr(i, pl)].eb(tr(j, pl), abs(v[j].X-pl) / v[j].Y);
                    adj[tr(j, pl)].eb(tr(i, pl), abs(v[i].X-pl) / v[i].Y);
                }
            }
        }
    }
    */
    
    dis[tr(0, v[0].X)] = 0, vis[tr(0, v[0].X)] = 1, dijkstra(tr(0, v[0].X));
    
    int minAns = INF;
    for (int i = 0; i < n; ++i) {
        minAns = min(minAns, dis[tr(1, i)]);
    }
    
    cout << minAns << "\n";
    
    return 0;
}

Compilation message

skyscraper.cpp: In function 'void dijkstra(int)':
skyscraper.cpp:52:23: warning: unused variable 'cost' [-Wunused-variable]
         auto [cost, id] = pq.top(); pq.pop();
                       ^
# Verdict Execution time Memory Grader output
1 Correct 67 ms 110968 KB Output is correct
2 Correct 69 ms 110968 KB Output is correct
3 Correct 68 ms 110968 KB Output is correct
4 Incorrect 68 ms 110968 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 68 ms 110968 KB Output is correct
2 Correct 69 ms 111096 KB Output is correct
3 Correct 69 ms 110968 KB Output is correct
4 Incorrect 68 ms 110840 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 68 ms 110968 KB Output is correct
2 Correct 67 ms 110968 KB Output is correct
3 Correct 68 ms 110968 KB Output is correct
4 Incorrect 67 ms 110968 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 76 ms 111032 KB Output is correct
2 Correct 67 ms 110984 KB Output is correct
3 Correct 70 ms 110968 KB Output is correct
4 Incorrect 67 ms 110968 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 67 ms 110968 KB Output is correct
2 Correct 68 ms 110968 KB Output is correct
3 Correct 68 ms 110968 KB Output is correct
4 Incorrect 68 ms 110968 KB Output isn't correct
5 Halted 0 ms 0 KB -