Submission #884571

#TimeUsernameProblemLanguageResultExecution timeMemory
884571JakobZorzVision Program (IOI19_vision)C++14
100 / 100
42 ms5436 KiB
#include"vision.h"
#include<iostream>
#include<vector>
using namespace std;

int w,h;

int get_cell(int x,int y){
    return y*w+x;
}

// or, oxr
pair<int,int>construct_diagonal1(int x,int y){
    vector<int>ins;
    while(x<w&&y<h){
        ins.push_back(get_cell(x,y));
        x++;
        y++;
    }
    return{add_or(ins),add_xor(ins)};
}

pair<int,int>construct_diagonal2(int x,int y){
    vector<int>ins;
    while(x>=0&&y<h){
        ins.push_back(get_cell(x,y));
        x--;
        y++;
    }
    return{add_or(ins),add_xor(ins)};
}

vector<int>func1(vector<pair<int,int>>arr1,int k){
    vector<int>arr2;
    
    for(int i=0;i+k<=(int)arr1.size();i++){
        vector<int>vec_or;
        vector<int>vec_xor;
        for(int j=i;j<i+k;j++){
            vec_or.push_back(arr1[j].first);
            vec_xor.push_back(arr1[j].second);
        }
        
        int gor=add_or(vec_or);
        int gxor=add_xor(vec_xor);
        int gnxor=add_not(gxor);
        arr2.push_back(add_and({gor,gnxor}));
    }
    
    return arr2;
}

void construct_network(int H,int W,int k){
    w=W;
    h=H;
    vector<pair<int,int>>diagonals1;
    for(int y=h-1;y>0;y--)
        diagonals1.push_back(construct_diagonal1(0,y));
    for(int x=0;x<w;x++)
        diagonals1.push_back(construct_diagonal1(x,0));
    
    vector<pair<int,int>>diagonals2;
    for(int x=0;x<w;x++)
        diagonals2.push_back(construct_diagonal2(x,0));
    for(int y=1;y<h;y++)
        diagonals2.push_back(construct_diagonal2(w-1,y));
    
    vector<int>intervals1,intervals2;
    vector<int>res;
    
    int or1=add_or(func1(diagonals1,k));
    int or2=add_or(func1(diagonals2,k));
    int or3=add_or(func1(diagonals1,k+1));
    int or4=add_or(func1(diagonals2,k+1));
    int and1=add_and({or1,or2});
    int and2=add_and({or3,or4});
    int not1=add_not(and1);
    add_and({and2,not1});
}
#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...