답안 #281634

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
281634 2020-08-23T09:26:24 Z NONAME Vision Program (IOI19_vision) C++14
0 / 100
16 ms 1152 KB
#include "vision.h"

void construct_network(int H, int W, int K) {
    std::vector <int> res, res1;

    if (K == 1) {
        std::vector <int> row, col;
        for (int i = 0; i < H; ++i) {
            std::vector <int> cur;
            for (int j = 0; j < W; ++j)
                cur.push_back(i * W + j);

            int x = add_or(cur);
            row.push_back(x);
        }

        for (int j = 0; j < W; ++j) {
            std::vector <int> cur;
            for (int i = 0; i < H; ++i)
                cur.push_back(i * W + j);

            int x = add_or(cur);
            col.push_back(x);
        }

        int rs1 = -1;
        for (int i = 0; i < H - 1; ++i)
            rs1 = add_or({(rs1 == -1) ? row[i] : rs1, add_and({row[i], row[i + 1]})});

        int rs2 = -1;
        for (int i = 0; i < W - 1; ++i)
            rs2 = add_or({(rs2 == -1) ? row[i] : rs2, add_and({col[i], col[i + 1]})});

        int total = add_and({rs1, rs2});

        int result = -1;
        for (int i = 0; i < H; ++i)
            result = add_xor({(result == -1) ? row[i] : result, row[i]});

        for (int i = 0; i < W; ++i)
            result = add_xor({(result == -1) ? col[i] : result, col[i]});

        add_and({total, result});

        return;
    }

    if (((H > 30) || (W > 30)) && (H > 1) && (W > 1)) {
        for (int x = 0; x < H; ++x)
        for (int y = 0; y < W; ++y) {
            if (x + y != K)
                continue;
            
            res.push_back(x * W + y);
        }

        add_or(res);
        add_and({0, H * W});
    } else {
        int cnt = 0;
        for (int x1 = 0; x1 < H; ++x1)
        for (int y1 = 0; y1 < W; ++y1) {
            std::vector <int> cur;

            for (int x2 = 0; x2 < H; ++x2)
            for (int y2 = 0; y2 < W; ++y2) {
                if ((abs(x1 - x2) + abs(y1 - y2)) != K)
                    continue;

                cur.push_back(x2 * W + y2);
            }

            if (cur.empty())
                continue;

            add_or(cur);
            res.push_back(H * W + cnt);
            ++cnt;
            add_and({x1 * W + y1, res.back()});
            res1.push_back(H * W + cnt);
            ++cnt;
        }

        add_or(res1);
    }
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB WA in grader: Invalid index
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB WA in grader: Invalid index
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB WA in grader: Invalid index
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB WA in grader: Invalid index
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB WA in grader: Invalid index
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB on inputs (0, 0), (0, 1), expected 1, but computed 0
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 16 ms 1152 KB on inputs (0, 126), (66, 191), expected 0, but computed 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB WA in grader: Invalid index
2 Halted 0 ms 0 KB -