# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1031522 | Marco_Escandon | Vision Program (IOI19_vision) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
int add_and(vector<int> Ns) {
return instructionNetwork.add_instruction(_AND, Ns);
}
int add_or(vector<int> Ns) {
return instructionNetwork.add_instruction(_OR, Ns);
}
int add_xor(vector<int> Ns) {
return instructionNetwork.add_instruction(_XOR, Ns);
}
int add_not(int N) {
vector<int> Ns = {N};
return instructionNetwork.add_instruction(_NOT, Ns);
}
typedef int ll;
void construct_network(int H, int W, int K) {
vector<ll> ia, da;
for(int i=0; i<W; i++)
{
vector<ll> temp;
for(int j=0; j<=min(i,H-1); j++)
temp.push_back((i-j)+(W*j));
ia.push_back(add_or(temp));
}
for(int i=1; i<H; i++)
{
vector<ll> temp;
for(int j=0; j<W; j++)
if(j+i<H)
temp.push_back((W-j-1)+(W*(j+i)));
ia.push_back(add_or(temp));
}
for(int i=W-1; i>-1; i--)
{
vector<ll> temp;
for(int j=0; j<=min(H-1,W-i-1); j++)
{
temp.push_back((i+j)+(W*j));
}
da.push_back(add_or(temp));
}
for(int i=1; i<H; i++)
{
vector<ll> temp;
for(int j=0; j+i<W; j++)
if(j+i<H)
temp.push_back(j+(W*(j+i)));
da.push_back(add_or(temp));
}
vector<ll> asd1;
for(int i=0; i<ia.size()-K; i++)
{
vector<int> sub_vector(ia.begin() + i, ia.begin() + i+K+1);
ll a=add_xor(sub_vector);
ll b=add_not(a);
ll c=add_or(sub_vector);
asd1.push_back(add_and({b,c}));
}
vector<ll> asd2;
for(int i=0; i<da.size()-K; i++)
{
vector<int> sub_vector(da.begin() + i, da.begin() + i+K+1);
ll a=add_xor(sub_vector);
ll b=add_not(a);
ll c=add_or(sub_vector);
asd2.push_back(add_and({b,c}));
}
ll bsk_1=add_and({add_or(asd1),add_or(asd2)});
asd1.clear();
for(int i=0; i<ia.size()-K+1; i++)
{
vector<int> sub_vector(ia.begin() + i, ia.begin() + i+K);
ll a=add_xor(sub_vector);
ll b=add_not(a);
ll c=add_or(sub_vector);
asd1.push_back(add_and({b,c}));
}
asd2.clear();
for(int i=0; i<da.size()-K+1; i++)
{
vector<int> sub_vector(da.begin() + i, da.begin() + i+K);
ll a=add_xor(sub_vector);
ll b=add_not(a);
ll c=add_or(sub_vector);
asd2.push_back(add_and({b,c}));
}
ll bsk_2=add_and({add_or(asd1),add_or(asd2)});
ll ans=add_and({bsk_1,add_not(bsk_2)});
}