Submission #36661568


Source Code Expand

#include <vector>
#include <array>
#include <stack>
#include <queue>
#include <list>
#include <bitset>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
#include <numeric>
#include <iostream>
#include <iomanip>
#include <string>
#include <chrono>
#include <random>
#include <cmath>
#include <cassert>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <functional>
#include <sstream>
#include <complex>

// #include <atcoder/all>

using namespace std;

// using Mint = atcoder::modint998244353;


// #define __LOCAL_DEBUG__ 0

//e.g., auto int_V567 = VECTOR<int>(0, 5, 6, 7)
template<typename T> auto VECTOR(const T& val, int sz) { return vector<T>(sz, val); }
template<typename T, typename... D> auto VECTOR(const T& val, int sz, D... ds) { return vector< decltype(VECTOR(val, ds...)) > (sz, VECTOR(val, ds...)); }


template<typename K, typename V> ostream& operator << (ostream& os, const pair<K, V>& p) {
    os << "(" << p.first << ": " << p.second << ")";
    return os;
}
template<typename T> ostream& operator << (ostream& os, const vector<T>& A) {
    int sz = A.size();
    os << "[";
    for (int i = 0; i < sz; ++i) { os<< A[i] << (i == sz - 1 ? "" : ", "); }
    os << "]";
    return os;
}
template<typename T, typename CMP> ostream& operator << (ostream& os, const set<T, CMP>& S) {
    os << "{";
    int rem = S.size();
    for (auto& x : S) { os << x << (--rem == 0 ? "" : ", ");}
    os << "}";
    return os;
}
template<typename T, typename CMP> ostream& operator << (ostream& os, const multiset<T, CMP>& S) {
    os << "{";
    int rem = S.size();
    for (auto& x : S) { os << x << (--rem == 0 ? "" : ", "); }
    os << "}";
    return os;
}
template<typename K, typename V, typename CMP> ostream& operator << (ostream& os, const map<K, V, CMP>& M) {
    os << "{";
    int rem = M.size();
    for (auto& x : M) { os << x << (--rem == 0 ? "" : ", "); }
    os << "}";
    return os;
}
template<typename K, typename V, typename CMP> ostream& operator << (ostream& os, const multimap<K, V, CMP>& M) {
    os << "{";
    int rem = M.size();
    for (auto& x : M) { os << x << (--rem == 0 ? "" : ", "); }
    os << "}";
    return os;
}

template<typename T> ostream& operator << (ostream& os, const unordered_set<T>& M) {
    os << "{";
    int rem = M.size();
    for (auto& x : M) { os << x << (--rem == 0 ? "" : ", "); }
    os << "}";
    return os;
}
template<typename K, typename V> ostream& operator << (ostream& os, const unordered_map<K, V>& M) {
    os << "{";
    int rem = M.size();
    for (auto& x : M) { os << x << (--rem == 0 ? "" : ", "); }
    os << "}";
    return os;
}


#ifdef __LOCAL_DEBUG__

const string COLOR_RESET = "\033[0m", BRIGHT_GREEN = "\033[1;32m", BRIGHT_RED = "\033[1;31m", BRIGHT_CYAN = "\033[1;36m", NORMAL_CROSSED = "\033[0;9;37m", RED_BACKGROUND = "\033[1;41m", NORMAL_FAINT = "\033[0;2m",
             RED="\033[0;31m", GREEN = "\033[0;32m", BLUE="\033[0;34m", /*ORANGE = "\033[0;33m",*/ YELLOW = "\033[1;33m", MAGENTA = "\033[1;35m", CYAN = "\033[0;36m", WHITE = "\033[0;37m", 
             WHITE_BACKGROUND = "\033[0;47m", UNDERLINED_YELLOW = "\033[0;4;33m", UNDERLINED_BLUE = "\033[0;4;34m", UNDERLINED_MAGENTA = "\033[0;4;35m", HIGHLIGHT1 = "\033[0;1;4;35m";
#define __dbg(x,y) cerr << COLOR_RESET << BRIGHT_CYAN << x << COLOR_RESET << " = " << (y) << " | "
// #define __dbgContext() cerr << NORMAL_FAINT << " (L" << __LINE__ << ") " << __FILE__ << COLOR_RESET << endl
// #define __dbgContext() cerr << COLOR_RESET << NORMAL_FAINT << " (L" << RED << __LINE__ << NORMAL_FAINT << ") "  << __FILE__ << COLOR_RESET << endl
#define __dbgContext() cerr << COLOR_RESET << NORMAL_FAINT << " @(" << GREEN << __FILE__ << ":" << RED << __LINE__ << NORMAL_FAINT << ") " << COLOR_RESET << endl
// #define dbg(x) cerr << BRIGHT_CYAN << #x << COLOR_RESET << " = " << (x) << NORMAL_FAINT << " (L" << __LINE__ << ") " << __FILE__ << COLOR_RESET << endl
#define dbg(x) cerr << COLOR_RESET << BRIGHT_CYAN << #x << COLOR_RESET << " = " << (x) <<  NORMAL_FAINT << " (L" << RED << __LINE__ << NORMAL_FAINT << ") "  << __FILE__ << COLOR_RESET << endl

#define dbgif(cond, x) ((cond) ? cerr << COLOR_RESET << BRIGHT_CYAN << #x << COLOR_RESET << " = " << (x) << NORMAL_FAINT << " (L" << __LINE__ << ") " << __FILE__ << COLOR_RESET << endl : cerr)

template<typename T> void __print(const char* name, T&& x) {
    __dbg(name, x);
}

template<typename T, typename... D> void __print(const char* name, T&& value, D&&... d) {
    auto p = strchr(name, ',');
    __dbg(string(name, p - name).c_str(), value);
    __print(p + 1, d...);
}

#define print(...) __print(#__VA_ARGS__, __VA_ARGS__), __dbgContext();


//Be careful! For highlighting the output.
// #define cout cout << HIGHLIGHT1

#define write std::cout << HIGHLIGHT1

#else
#define __dbg(x, y) 
#define __dbgContext() 
#define dbg(x) 
#define dbgif(cond, x) 
#define print(...) 

#define write std::cout 

#endif


template<typename T>
struct Rect {
    Rect(T _t = INF, T _b = -INF, T _l = INF, T _r = -INF) : t(_t), b(_b), l(_l), r(_r) {
    }
    void add(int x, int y) {
        t = min(t, x), b = max(b, x);
        l = min(l, y), r = max(r, y);
    }

    bool empty() {
        return !(t <= b && l <= r);
    }

    T t, b, l, r;

    static const T INF = numeric_limits<T>::max();
};

int main(int argc, char** argv) {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout << fixed << setprecision(12);


    int H, W, N, h, w;
    cin >> H >> W >> N >> h >> w;

    vector<vector<int>> A(H, vector<int>(W, 0));
    for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
            cin >> A[i][j];
            --A[i][j];
        }
    }



    vector<Rect<int>> rects(N + 1);
    for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
            rects[A[i][j]].add(i, j);
        }
    }

    int total = 0;
    for (auto& r : rects) {
        if (!r.empty()) {
            ++total;
        }
    }
    print(total);
    vector<vector<int>> acc(H + 2, vector<int>(W + 2, 0));

    for (auto& rect : rects) {
        if (rect.empty()) {
            continue;
        }
        int t = rect.t, b = rect.b, l = rect.l, r = rect.r;
        print(t, b, l, r);
        int minX = max(0, b - (h - 1));
        int maxX = min(t, H - h);
        int minY = max(0, r - (w - 1));
        int maxY = min(l, W - w);
        print(minX, maxX, minY, maxY);
        if (minX <= maxX && minY <= maxY) {
            acc[minX + 1][minY + 1] += 1;
            acc[minX + 1][maxY + 1 + 1] -= 1;
            acc[maxX + 1 + 1][minY + 1] -= 1;
            acc[maxX + 1 + 1][maxY + 1  + 1] += 1;
        }
    }

    for (int i = 1; i <= H; ++i) {
        for (int j = 1; j <= W; ++j) {
            acc[i][j] += acc[i][j - 1] + acc[i - 1][j] - acc[i - 1][j - 1];
        }
    }
    // for (auto& V : acc) {
    //     print(V);
    // }


    for (int i = 0; i + h <= H; ++i) {
        for (int j = 0; j + w <= W; ++j) {
            auto ans = total - acc[i + 1][j + 1];
            write << ans << (j + w == W ? '\n' : ' ');
        }
    }

    return 0;
}

Submission Info

Submission Time
Task E - Grid Filling
User qwycnjwami
Language C++ (GCC 9.2.1)
Score 500
Code Size 7366 Byte
Status AC
Exec Time 20 ms
Memory 3912 KiB

Compile Error

./Main.cpp: In function ‘int main(int, char**)’:
./Main.cpp:159:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
  159 | int main(int argc, char** argv) {
      |          ~~~~^~~~
./Main.cpp:159:27: warning: unused parameter ‘argv’ [-Wunused-parameter]
  159 | int main(int argc, char** argv) {
      |                    ~~~~~~~^~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 24
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 03_max_12.txt, 03_max_13.txt, 03_max_14.txt, 03_max_15.txt, 04_edge_16.txt, 04_edge_17.txt, 04_edge_18.txt, 04_edge_19.txt, 04_edge_20.txt, 04_edge_21.txt, 04_edge_22.txt, 04_edge_23.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 5 ms 3412 KiB
00_sample_01.txt AC 2 ms 3468 KiB
00_sample_02.txt AC 2 ms 3440 KiB
01_small_03.txt AC 2 ms 3416 KiB
01_small_04.txt AC 2 ms 3512 KiB
01_small_05.txt AC 2 ms 3540 KiB
02_random_06.txt AC 2 ms 3464 KiB
02_random_07.txt AC 12 ms 3896 KiB
02_random_08.txt AC 4 ms 3448 KiB
02_random_09.txt AC 2 ms 3568 KiB
02_random_10.txt AC 2 ms 3500 KiB
02_random_11.txt AC 2 ms 3604 KiB
03_max_12.txt AC 14 ms 3892 KiB
03_max_13.txt AC 20 ms 3872 KiB
03_max_14.txt AC 20 ms 3872 KiB
03_max_15.txt AC 13 ms 3912 KiB
04_edge_16.txt AC 19 ms 3768 KiB
04_edge_17.txt AC 14 ms 3904 KiB
04_edge_18.txt AC 14 ms 3872 KiB
04_edge_19.txt AC 14 ms 3816 KiB
04_edge_20.txt AC 17 ms 3796 KiB
04_edge_21.txt AC 14 ms 3816 KiB
04_edge_22.txt AC 13 ms 3852 KiB
04_edge_23.txt AC 14 ms 3732 KiB