| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 239759 | ne4eHbKa | Clickbait (COCI18_clickbait) | C++17 | 13 ms | 3072 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
template<typename t> void umax(t &a, t b) {a = max(a, b);}
template<typename t> void umin(t &a, t b) {a = min(a, b);}
auto steps = initializer_list< pair<int, int> > {
    {+1, +0},
    {+0, +1},
    {-1, -0},
    {-0, -1}
};
#define ft first
#define sd second
const int N = 1024;
struct cont;
cont* follow_pipe(int, int);
void extend(cont*, int, int);
int n, m;
string a[N];
bool valid(int i, int j) {
    return i >= 0 && j >= 0 && i < n && j < m;
}
bool dig(int i, int j) {
    if(!valid(i, j)) return false;
    return a[i][j] >= '0' && a[i][j] <= '9';
}
bool pipe(int i, int j) {
    if(!valid(i, j)) return false;
    int c = a[i][j];
    return c == '|' || c == '-' || c == '+';
}
struct cont {
    int lx{n}, ly{m}, rx{-1}, ry{-1};
    map<int, cont*> nx;
    string name; int nmx, nmy{m};
    cont(int i, int j) {
        extend(this, i, j);
        for(name = ""; nmy < m && dig(nmx, nmy); ++nmy)
            name += a[nmx][nmy];
        for(int i = rx; i >= lx; --i) {
            cont*
            c = follow_pipe(i, ly - 2); if(c) nx[-i] = c;
            c = follow_pipe(i, ry + 2); if(c) nx[-i] = c;
        }
    }
    void make() {
        for(auto i : nx) i.sd->make();
        cout << name << '\n';
    }
};
bool mk[N][N];
void extend(cont *c, int i, int j) {
    if(!valid(i, j) || pipe(i, j) || mk[i][j]) return;
    mk[i][j] = true;
    umin(c->lx, i);
    umax(c->rx, i);
    umin(c->ly, j);
    umax(c->ry, j);
    if(dig(i, j)) {
        umin(c->nmy, j);
        c->nmx = i;
    }
    for(auto s : steps)
        extend(c, i + s.ft, j + s.sd);
}
cont* follow_pipe(int i, int j) {
    if(!pipe(i, j) || mk[i][j]) return 0;
    mk[i][j] = true;
    for(auto s : steps) {
        int x = i + s.ft;
        int y = j + s.sd;
        if(!pipe(x, y)) continue;
        if(a[x][y] != a[i][j] &&
           a[x][y] != '+' &&
           a[i][j] != '+') continue;
        cont* res = follow_pipe(x, y);
        if(res) return res;
    }
    if(i + 2 < n
       && a[i][j] == '|'
       && a[i + 1][j] == '-') return new cont(i + 2, j);
    return 0;
}
void solve() {
#ifdef _LOCAL
    memset(mk, 0, sizeof mk);
#endif
    cin >> n >> m;
    for(int i = 0; i < n; ++i) cin >> a[i];
    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < m; ++j) {
            if(a[i][j] != '1' || dig(i, j - 1) || dig(i, j + 1)) continue;
            (new cont(i, j))->make();
            return;
        }
    }
    cout << "wat\n";
}
signed main() {
#ifdef _LOCAL
    freopen("in.txt", "r", stdin);
    int t; cin >> t;
    for(int i = 1; i <= t; ++i) {
        cerr << "case #" << i << endl;
        solve();
        cerr << endl;
    }
#else
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
#endif
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
