Submission #417686

#TimeUsernameProblemLanguageResultExecution timeMemory
417686usachevd0Rectangles (IOI19_rect)C++17
13 / 100
410 ms136000 KiB
#pragma gcc optimize("Ofast")
#pragma gcc optimize("O3")
#pragma gcc target("avx,avx2,fma,sse,sse2,sse3,popcnt")
#include <bits/stdc++.h>
#ifndef LOCAL
    #include "rect.h"
#endif

using namespace std;

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define all(a) (a).begin(), (a).end()
#define Time (clock() * 1.0 / CLOCKS_PER_SEC)
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;
using pll = pair<ll, ll>;
using ld = long double;
template<typename T1, typename T2> bool chkmin(T1& x, T2 y) {
    return y < x ? (x = y, true) : false;
}
template<typename T1, typename T2> bool chkmax(T1& x, T2 y) {
    return y > x ? (x = y, true) : false;
}
void debug_out() {
    cerr << endl;
}
template<typename T1, typename... T2> void debug_out(T1 A, T2... B) {
    cerr << ' ' << A;
    debug_out(B...);
}
template<typename T> void mdebug_out(T* a, int n) {
    for (int i = 0; i < n; ++i)
        cerr << a[i] << ' ';
    cerr << endl;
}
#ifdef LOCAL
    #define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
    #define mdebug(a, n) cerr << #a << ": ", mdebug_out(a, n)
#else
    #define debug(...) 1337
    #define mdebug(a, n) 1337
#endif
template<typename T> ostream& operator << (ostream& stream, const vector<T>& v) {
    for (auto& x : v)
        stream << x << ' ';
    return stream;
}
template<typename T1, typename T2> ostream& operator << (ostream& stream, const pair<T1, T2>& p) {
    return stream << p.first << ' ' << p.second;
}

const int INF32 = 1e9;
const int maxN = 2503;
int a[maxN][maxN];
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};
bool used[maxN][maxN];

pii qu[maxN * maxN];
int qt;

ll count_rectangles(vector<vector<int>> _a) {
    int n = _a.size(), m = _a[0].size();
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j)
            a[i][j] = _a[i][j];
    if (min(n, m) < 3) return 0;
    ll ans = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (a[i][j] == 1 || used[i][j]) continue;
            
            qu[0] = {i, j};
            used[i][j] = 1;
            qt = 1;
            int cnt = 0;
            int minX = +INF32;
            int maxX = -INF32;
            int minY = +INF32;
            int maxY = -INF32;
            for (int qi = 0; qi < qt; ++qi) {
                int x = qu[qi].fi, y = qu[qi].se;
                ++cnt;
                chkmin(minX, x);
                chkmax(maxX, x);
                chkmin(minY, y);
                chkmax(maxY, y);
                for (int d = 0; d < 4; ++d) {
                    int x1 = x + dx[d];
                    int y1 = y + dy[d];
                    if (0 <= x1 && x1 < n && 0 <= y1 && y1 < m && !a[x1][y1] && !used[x1][y1]) {
                        used[x1][y1] = 1;
                        qu[qt++] = {x1, y1};
                    }
                }
            }
            if (1 <= minX && maxX <= n - 2 && 1 <= minY && maxY <= m - 2 && (maxX - minX + 1) * (maxY - minY + 1) == cnt)
                ++ans;
        }
    }
    return ans;
    return ans;
}


#ifdef LOCAL


int main() {
#ifdef LOCAL
    freopen("in", "r", stdin);
#endif
    // InputReader inputReader(STDIN_FILENO);
    int n, m;
    cin >> n >> m;
    // n = inputReader.readInt();
    // m = inputReader.readInt();
    vector<vector<int>> a(n, vector<int>(m));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> a[i][j];
            // a[i][j] = inputReader.readInt();
        }
    }
    // inputReader.close();
    
    auto oldTime = Time;
    long long result = count_rectangles(a);
    debug(Time - oldTime);

    printf("%lld\n", result);
    fclose(stdout);
    return 0;
}
#endif

Compilation message (stderr)

rect.cpp:1: warning: ignoring '#pragma gcc optimize' [-Wunknown-pragmas]
    1 | #pragma gcc optimize("Ofast")
      | 
rect.cpp:2: warning: ignoring '#pragma gcc optimize' [-Wunknown-pragmas]
    2 | #pragma gcc optimize("O3")
      | 
rect.cpp:3: warning: ignoring '#pragma gcc target' [-Wunknown-pragmas]
    3 | #pragma gcc target("avx,avx2,fma,sse,sse2,sse3,popcnt")
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...