Submission #418667

#TimeUsernameProblemLanguageResultExecution timeMemory
418667dxz05Vision Program (IOI19_vision)C++14
58 / 100
79 ms11108 KiB
#include "vision.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MAXN = 2e5 + 3e2;

vector<int> vv[MAXN];

map<int, vector<int>> left_diagonal, right_diagonal;

int solve(int H, int W, int K){
    vector<int> Ns, vec;
    for (int i = 0; i < H; i++){
        for (int j = 0; j < W; j++){
            if (left_diagonal[i + j].front() != i * W + j) continue;

            Ns.clear();
            for (int x = 0; x < K; x++){
                for (int y : left_diagonal[i + j - x]) Ns.push_back(y);
            }

            int ind1 = add_or(Ns), ind2 = add_xor(Ns);
            ind2 = add_not(ind2);

            int ind = add_and({ind1, ind2});
            vec.push_back(ind);
        }
    }

    int lf = add_or(vec);

    vec.clear();

    for (int i = 0; i < H; i++){
        for (int j = 0; j < W; j++){
            if (right_diagonal[i - j].back() != i * W + j) continue;

            Ns.clear();
            for (int x = 0; x < K; x++){
                for (int y : right_diagonal[i - j - x]) Ns.push_back(y);
            }

            int ind1 = add_or(Ns), ind2 = add_xor(Ns);
            ind2 = add_not(ind2);

            int ind = add_and({ind1, ind2});
            vec.push_back(ind);
        }
    }

    int rg = add_or(vec);

    return add_and({lf, rg});
}

void construct_network(int H, int W, int K) {
	vector<int> Ns;

	left_diagonal.clear();
	right_diagonal.clear();

	for (int i = 0; i < H; i++){
	    for (int j = 0; j < W; j++){
	        left_diagonal[i + j].push_back(i * W + j);
            right_diagonal[i - j].push_back(i * W + j);
	    }
	}

	Ns = {solve(H, W, K + 1), solve(H, W, K)};
    add_xor(Ns);
}
#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...