제출 #1291366

#제출 시각아이디문제언어결과실행 시간메모리
1291366MMihalevVision Program (IOI19_vision)C++20
58 / 100
5 ms2072 KiB
#include<iostream>
#include<algorithm>
#include<vector>
#include "vision.h"
using namespace std;
const int MAX_N=2e3+3;
int n,m,k;
int tonum(int i,int j)
{
    return i*m+j;
}
int xorcol[MAX_N];
int xorrow[MAX_N];
int allzeroxorrow,allzeroxorcol;
void construct_network(int H, int W, int K)
{
    n=H;
    m=W;
    k=K;

    if(n*m*2<=10000)
    {
        vector<int>positionscheck;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                vector<int>cells;
                for(int i2=i;i2<n;i2++)
                {
                    if(i2==i && j+k<m)cells.push_back(tonum(i2,j+k));
                    if(i2>i)
                    {
                        int rem=k-(i2-i);
                        if(rem<0)break;

                        if(j-rem>=0)cells.push_back(tonum(i2,j-rem));
                        if(j+rem<m)cells.push_back(tonum(i2,j+rem));
                    }
                }

                if(cells.size()==0)continue;

                int pos=add_or(cells);
                vector<int>tmp;tmp.push_back(pos);tmp.push_back(tonum(i,j));
                positionscheck.push_back(add_and(tmp));
            }
        }

        add_or(positionscheck);

        return;
    }

    vector<int>xorrowcells;
    for(int i=0;i<n;i++)
    {
        vector<int>cells;
        for(int j=0;j<m;j++)
        {
            cells.push_back(tonum(i,j));
        }
        xorrow[i]=add_xor(cells);
        xorrowcells.push_back(xorrow[i]);
    }

    vector<int>xorcolcells;
    for(int j=0;j<m;j++)
    {
        vector<int>cells;
        for(int i=0;i<n;i++)
        {
            cells.push_back(tonum(i,j));
        }
        xorcol[j]=add_xor(cells);
        xorcolcells.push_back(xorcol[j]);
    }

    allzeroxorrow=add_or(xorrowcells);
    allzeroxorrow=add_not(allzeroxorrow);

    allzeroxorcol=add_or(xorcolcells);
    allzeroxorcol=add_not(allzeroxorcol);

    vector<int>androwcons;
    for(int i=1;i<n;i++)
    {
        androwcons.push_back(add_and({xorrowcells[i-1],xorrowcells[i]}));
    }

    vector<int>andcolcons;
    for(int j=1;j<m;j++)
    {
        andcolcons.push_back(add_and({xorcolcells[j-1],xorcolcells[j]}));
    }

    int consrow1,conscol1;
    consrow1=add_or(androwcons);
    consrow1=add_and({consrow1,allzeroxorcol});

    conscol1=add_or(andcolcons);
    conscol1=add_and({conscol1,allzeroxorrow});

    add_or({conscol1,consrow1});
}
#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...