Submission #377534

# Submission time Handle Problem Language Result Execution time Memory
377534 2021-03-14T09:40:52 Z ne4eHbKa Sateliti (COCI20_satellti) C++17
50 / 110
3000 ms 125592 KB
#include <bits/stdc++.h>
using namespace std;
#ifndef _LOCAL
#pragma GCC optimize("O3,Ofast")
#else
#pragma GCC optimize("O0")
#endif
template<typename t> inline void umin(t &a, const t b) {a = min(a, b);}
template<typename t> inline void umax(t &a, const t b) {a = max(a, b);}
typedef pair<int, int> pii;
typedef long long ll;
typedef long double ld;
typedef int8_t byte;
ll time() {return chrono::system_clock().now().time_since_epoch().count();}
mt19937 rnd(time());
#define ft first
#define sd second
#define len(f) int((f).size())
#define bnd(f) (f).begin(), (f).end()
#define _ <<' '<<
const int inf = 1e9 + 5;
const ll inf64 = 4e18 + 5;
const int md = 998244353;
namespace MD {
    void add(int &a, const int b) {if((a += b) >= md) a -= md;}
    void sub(int &a, const int b) {if((a -= b) < 0) a += md;}
    int prod(const int a, const int b) {return ll(a) * b % md;}
};

const int N = 1e3 + 5;
const int NN = 2e3 + 5;
const int K = 4e6 + 5;

int n, m, nn, mm, d;
int a[NN][NN], b[NN][NN], A[NN][NN], z[NN][NN];
int fst[K], lst[K], nxt[K], vl[K], t, e[K], ne;

inline void add(const int &i, const int &j) {
    umax(d, i + 1);
    if(fst[i] < 0) {
        fst[i] = lst[i] = t;
    } else {
        nxt[lst[i]] = t;
        lst[i] = t;
    }
    vl[t++] = j;
}

inline void iterate(const int &i) {
    if(fst[i] < 0) return;
    for(int j = fst[i]; ; j = nxt[j]) {
        e[ne++] = vl[j];
        if(j == lst[i]) {
            fst[i] = -1;
            return;
        }
    }
}

typedef pair<pii, pii> ppp;
ppp f[K]; int nf;

void combine(int a[NN][NN], int b[NN][NN], int c[NN][NN], int dx, int dy) {
    nf = 0;
    for(int i = 0; i + dx < nn; ++i)
        for(int j = 0; j + dy < mm; ++j)
            f[nf++] = {{a[i][j], b[i + dx][j + dy]}, {i, j}};

    if(true) {
        sort(f, f + nf);
        for(int i = 0, j = 0; i < nf; ++i) {
            if(i && f[i - 1].ft != f[i].ft) ++j;
            c[f[i].sd.ft][f[i].sd.sd] = j;
        }
        return;
    }

    d = t = 0;
    for(int i = 0; i < nf; ++i)
        add(f[i].ft.sd, i);
    ne = 0;
    for(int i = 0; i < d; ++i)
        iterate(i);

    d = t = 0;
    for(int i = 0; i < ne; ++i)
        add(f[e[i]].ft.ft, e[i]);
    ne = 0;
    for(int i = 0; i < d; ++i)
        iterate(i);

    for(int i = 0, j = 0; i < nf; ++i) {
        auto &g = f[e[i]];
        if(i && g.ft != f[e[i - 1]].ft)
            ++j;
        c[g.sd.ft][g.sd.sd] = j;
    }
}

void solve() {
    memset(fst, -1, sizeof fst);
    cin >> n >> m;
    for(int i = 0; i < n + n; ++i) {
        for(int j = 0; j < m + m; ++j) {
            if(i < n && j < m) {
                char c; cin >> c;
                a[i][j] = c == '.';
            } else
                a[i][j] = a[i % n][j % m];
        }
    }
    memset(A, 0, sizeof A);
    memcpy(z, a, sizeof z);
    nn = n << 1;
    mm = m << 1;
    for(int i = 0, u = m; ; ++i) {
        if(i) combine(a, a, a, 0, 1 << i - 1);
        if(u & 1 << i) {
            combine(a, A, A, 0, 1 << i);
            u ^= 1 << i;
            if(!u) break;
        }
    }
    memcpy(a, A, sizeof A);
    memset(A, 0, sizeof A);
    for(int i = 0, u = n; ; ++i) {
        if(i) combine(a, a, a, 1 << i - 1, 0);
        if(u & 1 << i) {
            combine(a, A, A, 1 << i, 0);
            u ^= 1 << i;
            if(!u) break;
        }
    }
    int x = 0, y = 0;
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
            if(A[i][j] < A[x][y])
                x = i, y = j;
    for(int i = 0; i < n; ++i, cout << '\n')
        for(int j = 0; j < m; ++j) cout << (z[x + i][y + j] ? '.' : '*');
}

signed main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#ifndef _LOCAL
//    freopen("file.in", "r", stdin);
//    freopen("file.out", "w", stdout);
#else
    system("color a");
    freopen("in.txt", "r", stdin);
    int t; cin >> t;
    while(t--)
#endif
    solve();
}

Compilation message

Main.cpp: In function 'void solve()':
Main.cpp:117:42: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
  117 |         if(i) combine(a, a, a, 0, 1 << i - 1);
      |                                        ~~^~~
Main.cpp:127:39: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
  127 |         if(i) combine(a, a, a, 1 << i - 1, 0);
      |                                     ~~^~~
# Verdict Execution time Memory Grader output
1 Correct 58 ms 63468 KB Output is correct
2 Correct 58 ms 63340 KB Output is correct
3 Correct 56 ms 63468 KB Output is correct
4 Correct 49 ms 63340 KB Output is correct
5 Correct 58 ms 63468 KB Output is correct
6 Correct 55 ms 63340 KB Output is correct
7 Correct 50 ms 63340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 58 ms 63468 KB Output is correct
2 Correct 58 ms 63340 KB Output is correct
3 Correct 56 ms 63468 KB Output is correct
4 Correct 49 ms 63340 KB Output is correct
5 Correct 58 ms 63468 KB Output is correct
6 Correct 55 ms 63340 KB Output is correct
7 Correct 50 ms 63340 KB Output is correct
8 Correct 1018 ms 68716 KB Output is correct
9 Correct 64 ms 63468 KB Output is correct
10 Correct 44 ms 63212 KB Output is correct
11 Correct 910 ms 68716 KB Output is correct
12 Correct 1018 ms 68844 KB Output is correct
13 Correct 999 ms 68972 KB Output is correct
14 Correct 1020 ms 68900 KB Output is correct
15 Correct 961 ms 68972 KB Output is correct
16 Correct 891 ms 69100 KB Output is correct
17 Correct 1130 ms 68972 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 58 ms 63468 KB Output is correct
2 Correct 58 ms 63340 KB Output is correct
3 Correct 56 ms 63468 KB Output is correct
4 Correct 49 ms 63340 KB Output is correct
5 Correct 58 ms 63468 KB Output is correct
6 Correct 55 ms 63340 KB Output is correct
7 Correct 50 ms 63340 KB Output is correct
8 Correct 1018 ms 68716 KB Output is correct
9 Correct 64 ms 63468 KB Output is correct
10 Correct 44 ms 63212 KB Output is correct
11 Correct 910 ms 68716 KB Output is correct
12 Correct 1018 ms 68844 KB Output is correct
13 Correct 999 ms 68972 KB Output is correct
14 Correct 1020 ms 68900 KB Output is correct
15 Correct 961 ms 68972 KB Output is correct
16 Correct 891 ms 69100 KB Output is correct
17 Correct 1130 ms 68972 KB Output is correct
18 Execution timed out 3068 ms 125592 KB Time limit exceeded
19 Halted 0 ms 0 KB -