Submission #587958

#TimeUsernameProblemLanguageResultExecution timeMemory
587958ogibogi2004Vision Program (IOI19_vision)C++14
47 / 100
25 ms2692 KiB

#include "vision.h"
#include<bits/stdc++.h>
using namespace std;

void construct_network(int H, int W, int K) {

    if(K==1)
    {
        int c1[W],r1[H],c2[W],r2[H];
        for(int i=0;i<H;i++)
        {
            vector<int>v;
            for(int j=0;j<W;j++)v.push_back(i*W+j);
            r1[i]=add_or(v);
        }
        for(int i=0;i<H-1;i++)
        {
            vector<int>v1;
            vector<int>v2;
            for(int j=0;j<W;j++)v1.push_back(i*W+j);
            for(int j=0;j<W;j++)v2.push_back((i+1)*W+j);
            r2[i]=add_and({add_or(v1),add_or(v2)});
        }
        for(int j=0;j<W;j++)
        {
            vector<int>v;
            for(int i=0;i<H;i++)v.push_back(W*i+j);
            c1[j]=add_or(v);
        }
        for(int j=0;j<W-1;j++)
        {
            vector<int>v1,v2;
            for(int i=0;i<H;i++)v1.push_back(W*i+j);
            for(int i=0;i<H;i++)v2.push_back(W*i+j+1);
            c2[j]=add_and({add_or(v1),add_or(v2)});
        }

        int cc1,cc2,rr1,rr2;
        vector<int>v;


        v.clear();
        for(int i=0;i<W;i++)v.push_back(c1[i]);
        cc1=add_xor(v);

        v.clear();
        for(int i=0;i<H;i++)v.push_back(r1[i]);
        rr1=add_xor(v);

        v.clear();
        for(int i=0;i<W-1;i++)v.push_back(c2[i]);
        if(W>1)cc2=add_xor(v);
        else cc2=0;

        v.clear();
        for(int i=0;i<H-1;i++)v.push_back(r2[i]);
        if(H>1)rr2=add_xor(v);
        else rr2=0;

        int case1=add_and({cc1,rr2});
        int case2=add_and({cc2,rr1});
        add_or({case1,case2});
        return;
    }
    vector<pair<pair<int,int>,pair<int,int> > >pairs;
    for(int i=0;i<H;i++)
    {
        for(int j=0;j<W;j++)
        {
            for(int i1=i;i1<H;i1++)
            {
                for(int j1=0;j1<W;j1++)
                {
                    if(i1==i&&j1<j)continue;
                    if(abs(i1-i)+abs(j1-j)==K)
                    {
                        pairs.push_back({{i,j},{i1,j1}});
                    }
                }
            }
        }
    }
    vector<int>ps;
    for(int i=0;i<pairs.size();i++)
    {
        ps.push_back(add_and({pairs[i].first.first*W+pairs[i].first.second,pairs[i].second.first*W+pairs[i].second.second}));
    }
    add_or(ps);
    /*
    vector<int>v;
    for(int i=0;i<H;i++)
    {
        for(int j=0;j<W;j++)
        {
            if(i+j==K)v.push_back(i*W+j);
        }
    }
    add_or(v);
    */
}

Compilation message (stderr)

vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:85:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<int, int>, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |     for(int i=0;i<pairs.size();i++)
      |                 ~^~~~~~~~~~~~~
#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...