Submission #377471

# Submission time Handle Problem Language Result Execution time Memory
377471 2021-03-14T08:58:13 Z ne4eHbKa Sateliti (COCI20_satellti) C++17
50 / 110
3000 ms 235860 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;
typedef array<array<int, NN>, NN> mt;
mt a[15], A, z;
int fst[K], lst[K], nxt[K], vl[K], t;

void add(int i, 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;
}

vector<int> e;

void iterate(int i) {
    if(fst[i] < 0) return;
    for(int j = fst[i]; ; j = nxt[j]) {
        e.push_back(vl[j]);
        if(j == lst[i]) return;
    }
}

typedef pair<pii, pii> ppp;
vector<ppp> f;

void combine(mt &a, mt &b, mt &c, int dx, int dy) {
    f.clear();
    for(int i = 0; i + dx < nn; ++i)
        for(int j = 0; j + dy < mm; ++j)
            f.push_back({{a[i][j], b[i + dx][j + dy]}, {i, j}});
    int k = len(f);

    d = t = 0;
    for(int i = 0; i < k; ++i)
        add(f[i].ft.sd, i);
    e.clear();
    for(int i = 0; i < d; ++i)
        iterate(i);
    memset(fst, -1, d << 2);

    d = t = 0;
    for(int i : e)
        add(f[i].ft.ft, i);
    e.clear();
    for(int i = 0; i < d; ++i)
        iterate(i);
    memset(fst, -1, d << 2);

    for(int i = 0, j = 0; i < k; ++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[0][i][j] = c == '.';
            } else
                a[0][i][j] = a[0][i % n][j % m];
            A[i][j] = 0;
        }
    }
    z = a[0];
    nn = n << 1;
    mm = m << 1;
    for(int i = 0, u = m; ; ++i) {
        if(i) combine(a[i - 1], a[i - 1], a[i], 0, 1 << i - 1);
        if(u & 1 << i) {
            combine(a[i], A, A, 0, 1 << i);
            u ^= 1 << i;
            if(!u) break;
        }
    }
    a[0] = A;
    for(int i = 0; i < nn; ++i)
        for(int j = 0; j < mm; ++j)
            A[i][j] = 0;
    for(int i = 0, u = n; ; ++i) {
        if(i) combine(a[i - 1], a[i - 1], a[i], 1 << i - 1, 0);
        if(u & 1 << i) {
            combine(a[i], 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:111:59: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
  111 |         if(i) combine(a[i - 1], a[i - 1], a[i], 0, 1 << i - 1);
      |                                                         ~~^~~
Main.cpp:123:56: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
  123 |         if(i) combine(a[i - 1], a[i - 1], a[i], 1 << i - 1, 0);
      |                                                      ~~^~~
# Verdict Execution time Memory Grader output
1 Correct 43 ms 50544 KB Output is correct
2 Correct 43 ms 50288 KB Output is correct
3 Correct 44 ms 50288 KB Output is correct
4 Correct 41 ms 50288 KB Output is correct
5 Correct 42 ms 50544 KB Output is correct
6 Correct 41 ms 50544 KB Output is correct
7 Correct 41 ms 50544 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 43 ms 50544 KB Output is correct
2 Correct 43 ms 50288 KB Output is correct
3 Correct 44 ms 50288 KB Output is correct
4 Correct 41 ms 50288 KB Output is correct
5 Correct 42 ms 50544 KB Output is correct
6 Correct 41 ms 50544 KB Output is correct
7 Correct 41 ms 50544 KB Output is correct
8 Correct 1320 ms 93272 KB Output is correct
9 Correct 44 ms 49136 KB Output is correct
10 Correct 48 ms 68076 KB Output is correct
11 Correct 396 ms 93164 KB Output is correct
12 Correct 357 ms 93648 KB Output is correct
13 Correct 454 ms 94800 KB Output is correct
14 Correct 447 ms 94672 KB Output is correct
15 Correct 672 ms 94800 KB Output is correct
16 Correct 570 ms 94800 KB Output is correct
17 Correct 377 ms 94416 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 43 ms 50544 KB Output is correct
2 Correct 43 ms 50288 KB Output is correct
3 Correct 44 ms 50288 KB Output is correct
4 Correct 41 ms 50288 KB Output is correct
5 Correct 42 ms 50544 KB Output is correct
6 Correct 41 ms 50544 KB Output is correct
7 Correct 41 ms 50544 KB Output is correct
8 Correct 1320 ms 93272 KB Output is correct
9 Correct 44 ms 49136 KB Output is correct
10 Correct 48 ms 68076 KB Output is correct
11 Correct 396 ms 93164 KB Output is correct
12 Correct 357 ms 93648 KB Output is correct
13 Correct 454 ms 94800 KB Output is correct
14 Correct 447 ms 94672 KB Output is correct
15 Correct 672 ms 94800 KB Output is correct
16 Correct 570 ms 94800 KB Output is correct
17 Correct 377 ms 94416 KB Output is correct
18 Execution timed out 3116 ms 235860 KB Time limit exceeded
19 Halted 0 ms 0 KB -