Submission #1073101

# Submission time Handle Problem Language Result Execution time Memory
1073101 2024-08-24T09:31:15 Z Ignut Stations (IOI20_stations) C++17
0 / 100
580 ms 684 KB
// Ignut

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 1111;

vector<int> tree[N];

vector<int> dist;

void dfs(int v, int par, int d) {
    dist[v] = d;
    for (int to : tree[v])
        if (to != par)
            dfs(to, v, d + 1);
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
    for (int i = 0; i < n; i ++) {
        tree[i].clear();
    }

    for (int i = 0; i < n - 1; i ++) {
        tree[u[i]].push_back(v[i]);
        tree[v[i]].push_back(u[i]);
    }

    vector<int> lbl(n);
    
    dist.resize(n);

    for (int i = 0; i < n; i ++) {
        dfs(i, -1, 0);
        vector<pair<int, int>> vec;
        for (int j = 0; j < n; j ++) vec.push_back({dist[j], j});
        sort(vec.begin(), vec.end());

        int maxDist = 0;
        for (int j = 0; j < n; j ++) maxDist = max(maxDist, dist[j]);

        lbl[i] = 0;
        for (int j = 0; j < n; j ++) lbl[i] = lbl[i] * 10 + vec[j].second + 1;

        lbl[i] = lbl[i] * 10 + maxDist;
    }

    // for (int val : lbl) cerr << val << ' ';
    // cerr << '\n';

    return lbl;
}

const int INF = 1e9 + 123;

int find_next_station(int s, int t, vector<int> c) {
    if (c.size() == 1) return c[0];
    for (int val : c) if (val == t) return t;

    // int tval;
    int tval = to_string(t)[0];
    while (t >= 10) t /= 10;
    // if (t != tval)
    //     return -10000;
    // if (t == 0 || tval == 0)
    //     return -10000;
    // tval = t;

    int bestPos = INF, ret = -1;
    int maxDist = INF;
    for (int v : c) {
        string str = to_string(v);
        int mxd = str.back() - '0';
        for (int i = 0; i + 1 < str.size(); i ++) {
            if ((str[i] - '0') == tval) {
                if (i < bestPos) {
                    bestPos = i;
                    ret = v;
                    maxDist = mxd;
                }
                else if (i == bestPos && mxd < maxDist) {
                    bestPos = i;
                    ret = v;
                    maxDist = mxd;
                }
            }
        }
    }
    return ret;
}


Compilation message

stations.cpp: In function 'int find_next_station(int, int, std::vector<int>)':
stations.cpp:76:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |         for (int i = 0; i + 1 < str.size(); i ++) {
      |                         ~~~~~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 281 ms 540 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=0, label=856660304
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 283 ms 344 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=0, label=-1060486851
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 279 ms 344 KB Invalid labels (values out of range). scenario=1, k=1000000, vertex=0, label=1509839959
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 580 ms 680 KB Output is correct
2 Correct 505 ms 684 KB Output is correct
3 Incorrect 401 ms 684 KB Wrong query response.
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 280 ms 344 KB Invalid labels (values out of range). scenario=1, k=1000000000, vertex=0, label=-1348816042
2 Halted 0 ms 0 KB -