제출 #478359

#제출 시각아이디문제언어결과실행 시간메모리
478359blueVision Program (IOI19_vision)C++17
26 / 100
36 ms1160 KiB
#include "vision.h"
#include <vector>
using namespace std;

void construct_network(int H, int W, int K_)
{
    if(K_ == 1)
    {
        int K = K_;
        vector<int> diag_res;

        for(int V = 1; V <= 2; V++)
        {
            vector<int> diag1_list;

            if(V == 1)
            {
                for(int d1 = 0; d1 <= H-1 + W-1; d1++)
                {
                    vector<int> op;
                    for(int i = 0; i < H; i++)
                    {
                        for(int j = 0; j < W; j++)
                        {
                            if(i+j == d1) op.push_back(W*i + j);
                        }
                    }
                    diag1_list.push_back(add_or(op));
                }
            }
            else
            {
                for(int d1 = 0-(W-1); d1 <= (H-1)-0; d1++)
                {
                    vector<int> op;
                    for(int i = 0; i < H; i++)
                    {
                        for(int j = 0; j < W; j++)
                        {
                            if(i-j == d1) op.push_back(W*i + j);
                        }
                    }
                    diag1_list.push_back(add_or(op));
                }
            }

            vector<int> diag1_comp_list;
            for(int i = 0; i+K < (int)diag1_list.size(); i++)
            {
                diag1_comp_list.push_back(add_and(vector<int>{diag1_list[i], diag1_list[i+K]}));
            }

            diag_res.push_back(add_or(diag1_comp_list));
        }

        add_and(diag_res);
    }
    else
    {
        vector<int> final_res;

        for(int K = K_-1; K <= K_; K++)
        {
            vector<int> diag_res;

            for(int V = 1; V <= 2; V++)
            {
                vector<int> diag1_list;

                if(V == 1)
                {
                    for(int d1 = 0; d1 <= H-1 + W-1; d1++)
                    {
                        vector<int> op;
                        for(int i = 0; i < H; i++)
                        {
                            for(int j = 0; j < W; j++)
                            {
                                if(i+j == d1) op.push_back(W*i + j);
                            }
                        }
                        diag1_list.push_back(add_or(op));
                    }
                }
                else
                {
                    for(int d1 = 0-(W-1); d1 <= (H-1)-0; d1++)
                    {
                        vector<int> op;
                        for(int i = 0; i < H; i++)
                        {
                            for(int j = 0; j < W; j++)
                            {
                                if(i-j == d1) op.push_back(W*i + j);
                            }
                        }
                        diag1_list.push_back(add_or(op));
                    }
                }

                vector<int> diag1_comp_list;
                for(int i = 0; i+K < (int)diag1_list.size(); i++)
                {
                    diag1_comp_list.push_back(add_and(vector<int>{diag1_list[i], diag1_list[i+K]}));
                }

                diag_res.push_back(add_or(diag1_comp_list));
            }

            final_res.push_back(add_and(diag_res));
        }

        add_and(vector<int>{add_not(final_res[0]), final_res[1]});
    }

}
#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...