# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1071218 | LittleOrange | 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 "vision.h"
#include<bits/stdc++.h>
using namespace std;
using ll = int;
const ll big = 1e9;
ll any(const vector<ll> &v){
return v.size()==1?v[0]:add_or(v);
}
void construct_network(int H, int W, int K) {
ll h = H;
ll w = W;
ll k = K;
vector<ll> segs1,segs2;
for(ll i = 0;i<h+w-1;i++){
vector<ll> v;
for(ll x = 0;x<h;x++){
ll y = i-x;
if (y>=0&&y<w) v.push_back(x*w+y);
}
//cerr << "seg1:";for(ll i : v) cerr << " " << i; cerr << "\n";
segs1.push_back(any(v));
}
for(ll i = 0;i<h+w-1;i++){
vector<ll> v;
for(ll x = 0;x<h;x++){
ll y = i+x-h+1;
if (y>=0&&y<w) v.push_back(x*w+y);
}
//cerr << "seg2:";for(ll i : v) cerr << " " << i; cerr << "\n";
segs2.push_back(any(v));
}
vector<ll> gp1,gp2;
for(ll i = 0;i<h+w-k-1;i++){
gp1.push_back(add_and({segs1[i],segs1[i+k]}));
}
for(ll i = 0;i<h+w-k-1;i++){
gp2.push_back(add_and({segs2[i],segs2[i+k]}));
}
ll res1 = any(gp1);
ll res2 = any(gp2);
add_and({res1,res2});
/*std::vector<int> Ns;
Ns = {0, 1};
int a = add_and(Ns);
Ns = {0, a};
int b = add_or(Ns);
Ns = {0, 1, b};
int c = add_xor(Ns);
add_not(c);*/
/*vector<vector<ll>> asks(H*W);
for(ll x1 = 0;x1<h;x1++){
for(ll y1 = 0;y1<w;y1++){
for(ll x2 = 0;x2<h;x2++){
for(ll y2 = 0;y2<w;y2++){
ll i1 = x1*w+y1;
ll i2 = x2*w+y2;
if (i1>=i2) continue;
if (abs(x1-x2)+abs(y1-y2)!=k) continue;
asks[i1].push_back(i2);
}
}
}
}
vector<ll> outs;
for(ll i = 0;i<h*w;i++){
if (asks[i].empty()) continue;
ll x = add_or(asks[i]);
//cerr << "add_or:"; for(ll j : asks[i]) cerr << " " << j;cerr << " -> " << x << "\n";
//cerr << "add_and: " << i << " " << x << "\n";
outs.push_back(add_and({i,x}));
}
add_or(outs);*/
}