답안 #377491

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
377491 2021-03-14T09:12:44 Z ne4eHbKa Sateliti (COCI20_satellti) C++17
50 / 110
3000 ms 235056 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[15][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}};

    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[0][i][j] = c == '.';
            } else
                a[0][i][j] = a[0][i % n][j % m];
            A[i][j] = 0;
        }
    }
    memcpy(z, a[0], sizeof z);
    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;
        }
    }
    memcpy(a[0], A, sizeof 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:108:59: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
  108 |         if(i) combine(a[i - 1], a[i - 1], a[i], 0, 1 << i - 1);
      |                                                         ~~^~~
Main.cpp:120:56: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
  120 |         if(i) combine(a[i - 1], a[i - 1], a[i], 1 << i - 1, 0);
      |                                                      ~~^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 50540 KB Output is correct
2 Correct 47 ms 50156 KB Output is correct
3 Correct 41 ms 50156 KB Output is correct
4 Correct 42 ms 50156 KB Output is correct
5 Correct 50 ms 50412 KB Output is correct
6 Correct 41 ms 50412 KB Output is correct
7 Correct 40 ms 50412 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 50540 KB Output is correct
2 Correct 47 ms 50156 KB Output is correct
3 Correct 41 ms 50156 KB Output is correct
4 Correct 42 ms 50156 KB Output is correct
5 Correct 50 ms 50412 KB Output is correct
6 Correct 41 ms 50412 KB Output is correct
7 Correct 40 ms 50412 KB Output is correct
8 Correct 1030 ms 91308 KB Output is correct
9 Correct 43 ms 49004 KB Output is correct
10 Correct 45 ms 68076 KB Output is correct
11 Correct 338 ms 91244 KB Output is correct
12 Correct 308 ms 91640 KB Output is correct
13 Correct 395 ms 92652 KB Output is correct
14 Correct 375 ms 92652 KB Output is correct
15 Correct 569 ms 92696 KB Output is correct
16 Correct 469 ms 92744 KB Output is correct
17 Correct 314 ms 92392 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 50540 KB Output is correct
2 Correct 47 ms 50156 KB Output is correct
3 Correct 41 ms 50156 KB Output is correct
4 Correct 42 ms 50156 KB Output is correct
5 Correct 50 ms 50412 KB Output is correct
6 Correct 41 ms 50412 KB Output is correct
7 Correct 40 ms 50412 KB Output is correct
8 Correct 1030 ms 91308 KB Output is correct
9 Correct 43 ms 49004 KB Output is correct
10 Correct 45 ms 68076 KB Output is correct
11 Correct 338 ms 91244 KB Output is correct
12 Correct 308 ms 91640 KB Output is correct
13 Correct 395 ms 92652 KB Output is correct
14 Correct 375 ms 92652 KB Output is correct
15 Correct 569 ms 92696 KB Output is correct
16 Correct 469 ms 92744 KB Output is correct
17 Correct 314 ms 92392 KB Output is correct
18 Execution timed out 3106 ms 235056 KB Time limit exceeded
19 Halted 0 ms 0 KB -