Submission #434195

#TimeUsernameProblemLanguageResultExecution timeMemory
434195emil_physmathVision Program (IOI19_vision)C++17
44 / 100
5 ms616 KiB
#include "vision.h"
#include <vector>
using namespace std;
const int maxN = 200;

void construct_network(int n, int m, int k) {
    auto OK = [&](int i, int j) {
        return 0 <= i && i < n && 0 <= j && j < m;
    };
    int sz = n * m;
    if (max(n, m) <= 30 || min(n, m) == 1)
    {
        vector<int> ands;
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < m; ++j)
            {
                vector<int> neis;
                for (int di = -k; di <= k; ++di)
                {
                    int dj = k - abs(di);
                    int x = i + di, y = j + dj;
                    if (OK(x, y))
                        neis.push_back(x * m + y);
                    if (OK(x, y) && !dj) continue;
                    x = i + di, y = j - dj;
                    if (OK(x, y))
                        neis.push_back(x * m + y);
                }
                if (neis.size())
                {
                    add_or(neis);
                    add_and(vector<int>{sz++, i * m + j});
                    ands.push_back(sz++);
                }
            }
        add_or(ands);
        return;
    }
    vector<int> neis;
    for (int i = 0; i <= k; ++i)
    {
        int j = k - i;
        neis.push_back(i * m + j);
    }
    add_or(neis);
    add_and(vector<int>{0, sz++});
    ++sz;
}
#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...