Submission #1323417

#TimeUsernameProblemLanguageResultExecution timeMemory
1323417kasamchiVision Program (IOI19_vision)C++20
14 / 100
9 ms1848 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;

void construct_network(int H, int W, int K) {
	int qidx = H * W;
    vector<int> base;
	vector<int> Ns;

    base.push_back(qidx); // 0
	for (int i = 0; i < H; i++) {
		Ns.clear();
		for (int j = 0; j < W; j++) {
			Ns.push_back(i * W + j);
		}
		add_or(Ns), qidx++;
	}
    base.push_back(qidx); // 1
    for (int i = 0; i < H; i++) {
		Ns.clear();
		for (int j = 0; j < W; j++) {
			Ns.push_back(i * W + j);
		}
		add_xor(Ns), qidx++;
	}
    base.push_back(qidx); // 2
    for (int i = 0; i < H; i++) {
        add_xor({base[0] + i, base[1] + i}), qidx++;
    }

    base.push_back(qidx); // 3
    for (int j = 0; j < W; j++) {
		Ns.clear();
		for (int i = 0; i < H; i++) {
			Ns.push_back(i * W + j);
		}
		add_or(Ns), qidx++;
	}
    base.push_back(qidx); // 4
    for (int j = 0; j < W; j++) {
		Ns.clear();
		for (int i = 0; i < H; i++) {
			Ns.push_back(i * W + j);
		}
		add_xor(Ns), qidx++;
	}
    base.push_back(qidx); // 5
    for (int j = 0; j < W; j++) {
        add_xor({base[3] + j, base[4] + j}), qidx++;
    }

    base.push_back(qidx); // 6
    for (int i = 0; i + 1 < H; i++) {
        add_and({base[0] + i, base[0] + i + 1}), qidx++;
    }
    base.push_back(qidx); // 7
    for (int j = 0; j + 1 < W; j++) {
        add_and({base[3] + j, base[3] + j + 1}), qidx++;
    }

    base.push_back(qidx); // 8
    Ns.clear();
    for (int i = 0; i < H; i++) {
        Ns.push_back(base[2] + i);
    }
    add_or(Ns), qidx++;
    base.push_back(qidx); // 9
    Ns.clear();
    for (int j = 0; j < W; j++) {
        Ns.push_back(base[5] + j);
    }
    add_or(Ns), qidx++;

    base.push_back(qidx); // 10
    if (H == 1) {
        add_xor({0, 0}), qidx++;
    } else {
        Ns.clear();
        for (int i = 0; i + 1 < H; i++) {
            Ns.push_back(base[6] + i);
        }
        add_or(Ns), qidx++;
    }
    base.push_back(qidx); // 11
    if (W == 1) {
        add_xor({0, 0}), qidx++;
    } else {
        Ns.clear();
        for (int j = 0; j + 1 < W; j++) {
            Ns.push_back(base[7] + j);
        }
        add_or(Ns), qidx++;
    }

    base.push_back(qidx); // 12
    add_and({base[8], base[11]}), qidx++;
    base.push_back(qidx); // 13
    add_and({base[9], base[10]}), qidx++;

    base.push_back(qidx); // 14
    add_or({base[12], base[13]});
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...