Submission #881436

# Submission time Handle Problem Language Result Execution time Memory
881436 2023-12-01T08:49:37 Z noompty Tracks in the Snow (BOI13_tracks) C++17
75.9375 / 100
2000 ms 81804 KB
#include <iostream>
#include <vector>
#include <tuple>
#include <queue>
#include <stack>
#include <deque>
#include <set>
#include <map>
#include <cmath>
#include <array>
#include <random>
#include <string>
#include <cassert>
#include <climits>
#include <algorithm>
#include <unordered_set>
#include <unordered_map>
using namespace std;
 
#define ll long long
#define f first
#define s second
 
void __print(int x) { cerr << x; }
void __print(long x) { cerr << x; }
void __print(long long x) { cerr << x; }
void __print(unsigned x) { cerr << x; }
void __print(unsigned long x) { cerr << x; }
void __print(unsigned long long x) { cerr << x; }
void __print(float x) { cerr << x; }
void __print(double x) { cerr << x; }
void __print(long double x) { cerr << x; }
void __print(char x) { cerr << '\'' << x << '\''; }
void __print(const char *x) { cerr << '\"' << x << '\"'; }
void __print(const string &x) { cerr << '\"' << x << '\"'; }
void __print(bool x) { cerr << (x ? "true" : "false"); }
 
template<typename A> void __print(const A &x);
template<typename A, typename B> void __print(const pair<A, B> &p);
template<typename... A> void __print(const tuple<A...> &t);
template<typename T> void __print(stack<T> s);
template<typename T> void __print(queue<T> q);
template<typename T, typename... U> void __print(priority_queue<T, U...> q);
 
template<typename A> void __print(const A &x) {
    bool first = true;
    cerr << '{';
    for (const auto &i : x) {
        cerr << (first ? "" : ","), __print(i);
        first = false;
    }
    cerr << '}';
}
 
template<typename A, typename B> void __print(const pair<A, B> &p) {
    cerr << '(';
    __print(p.f);
    cerr << ',';
    __print(p.s);
    cerr << ')';
}
 
template<typename... A> void __print(const tuple<A...> &t) {
    bool first = true;
    cerr << '(';
    apply([&first] (const auto &...args) { ((cerr << (first ? "" : ","), __print(args), first = false), ...); }, t);
    cerr << ')';
}
 
template<typename T> void __print(stack<T> s) {
    vector<T> debugVector;
    while (!s.empty()) {
        T t = s.top();
        debugVector.push_back(t);
        s.pop();
    }
    reverse(debugVector.begin(), debugVector.end());
    __print(debugVector);
}
 
template<typename T> void __print(queue<T> q) {
    vector<T> debugVector;
    while (!q.empty()) {
        T t = q.front();
        debugVector.push_back(t);
        q.pop();
    }
    __print(debugVector);
}
 
template<typename T, typename... U> void __print(priority_queue<T, U...> q) {
    vector<T> debugVector;
    while (!q.empty()) {
        T t = q.top();
        debugVector.push_back(t);
        q.pop();
    }
    __print(debugVector);
}
 
void _print() { cerr << "]\n"; }
 
template <typename Head, typename... Tail> void _print(const Head &H, const Tail &...T) {
    __print(H);
    if (sizeof...(T)) cerr << ", ";
    _print(T...);
}
 
#ifdef DEBUG
	#define D(...) cerr << "Line: " << __LINE__ << " [" << #__VA_ARGS__ << "] = ["; _print(__VA_ARGS__)
#else
	#define D(...)
#endif

int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

int h, w, dist[4005][4005], ans;
string grid[4005];
queue<pair<int, int>> q;

void bfs(int sr, int sc) {
    fill(&dist[0][0], &dist[0][0] + sizeof(dist) / sizeof(dist[0][0]), 2e9);
    dist[sr][sc] = 1;
    q.push({sr, sc});
    while (!q.empty()) {
        int cr = q.front().f, cc = q.front().s;
        q.pop();
        for (int i = 0, nr, nc; i < 4; i++) {
            nr = cr + dx[i];
            nc = cc + dy[i];
            if (nr >= 0 && nr < h && nc >= 0 && nc < w && grid[nr][nc] != '.') {
                if (grid[nr][nc] == grid[cr][cc]) {
                    if (dist[nr][nc] > dist[cr][cc]) {
                        dist[nr][nc] = dist[cr][cc];
                        q.push({nr, nc});
                    }
                } else {
                    if (dist[nr][nc] > dist[cr][cc] + 1) {
                        dist[nr][nc] = dist[cr][cc] + 1;
                        q.push({nr, nc});
                    }
                }
            }
        }
    }
}

int main() {

    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin >> h >> w;
    for (int i = 0; i < h; i++) {
        cin >> grid[i];
    }

    bfs(0, 0);

    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            if (dist[i][j] < 2e9) {
                ans = max(ans, dist[i][j]);
            }
        }
    }

    cout << ans << "\n";

}
# Verdict Execution time Memory Grader output
1 Correct 224 ms 63580 KB Output is correct
2 Correct 13 ms 63324 KB Output is correct
3 Correct 13 ms 63324 KB Output is correct
4 Correct 31 ms 63324 KB Output is correct
5 Correct 23 ms 63324 KB Output is correct
6 Correct 12 ms 63324 KB Output is correct
7 Correct 13 ms 63324 KB Output is correct
8 Correct 13 ms 63324 KB Output is correct
9 Correct 12 ms 63152 KB Output is correct
10 Correct 21 ms 63324 KB Output is correct
11 Correct 15 ms 63324 KB Output is correct
12 Correct 60 ms 63284 KB Output is correct
13 Correct 22 ms 63320 KB Output is correct
14 Correct 22 ms 63324 KB Output is correct
15 Correct 112 ms 63828 KB Output is correct
16 Correct 229 ms 63700 KB Output is correct
17 Correct 126 ms 63576 KB Output is correct
18 Correct 33 ms 63332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 63320 KB Output is correct
2 Correct 581 ms 65364 KB Output is correct
3 Execution timed out 2003 ms 81268 KB Time limit exceeded
4 Correct 1517 ms 67464 KB Output is correct
5 Correct 117 ms 73044 KB Output is correct
6 Execution timed out 2052 ms 81804 KB Time limit exceeded
7 Correct 13 ms 63576 KB Output is correct
8 Correct 13 ms 63324 KB Output is correct
9 Correct 28 ms 63248 KB Output is correct
10 Correct 13 ms 63236 KB Output is correct
11 Correct 13 ms 63324 KB Output is correct
12 Correct 14 ms 63324 KB Output is correct
13 Correct 576 ms 65060 KB Output is correct
14 Correct 282 ms 64344 KB Output is correct
15 Correct 26 ms 64284 KB Output is correct
16 Correct 559 ms 64104 KB Output is correct
17 Execution timed out 2063 ms 67812 KB Time limit exceeded
18 Correct 67 ms 67408 KB Output is correct
19 Correct 1520 ms 67816 KB Output is correct
20 Execution timed out 2068 ms 67004 KB Time limit exceeded
21 Execution timed out 2055 ms 73652 KB Time limit exceeded
22 Correct 117 ms 72916 KB Output is correct
23 Execution timed out 2033 ms 72380 KB Time limit exceeded
24 Correct 105 ms 73040 KB Output is correct
25 Correct 384 ms 81020 KB Output is correct
26 Correct 454 ms 76884 KB Output is correct
27 Correct 615 ms 81284 KB Output is correct
28 Execution timed out 2067 ms 81776 KB Time limit exceeded
29 Execution timed out 2037 ms 81672 KB Time limit exceeded
30 Execution timed out 2035 ms 81224 KB Time limit exceeded
31 Execution timed out 2056 ms 75012 KB Time limit exceeded
32 Execution timed out 2075 ms 81316 KB Time limit exceeded