Submission #1244224

#TimeUsernameProblemLanguageResultExecution timeMemory
1244224AmaarsaaVision Program (IOI19_vision)C++20
100 / 100
45 ms7128 KiB
#include<bits/stdc++.h> #include "vision.h" using namespace std; using ll = int; int ind; int not_greater_left (int H, int W, int S){ S ++; ll i, lo, hi, lo_ind1, r, lo_ind2, j; vector < int > v[502]; vector < int > answer; ind = H * W; lo = 1e9; hi= 0; for (i = 0; i < H; i ++) { for ( j = 0; j < W; j ++) { r = j - i + H; lo = min(lo, r); hi = max(hi, r); v[r].push_back(i * W + j); } } lo_ind1 = -1; for (i = lo; i <= hi; i ++) { if ( lo_ind1 == -1) { lo_ind1 = add_or(v[i]); } else add_or(v[i]); } lo_ind2 = -1; for (i = lo; i <= hi; i ++) { if ( lo_ind2 == -1) { lo_ind2 = add_xor(v[i]); } else add_xor(v[i]); } for (i = lo; i + (S) - 1 <= hi; i ++) { vector < int > q; for ( j = i; j <= i + (S) - 1; j ++) { q.push_back(lo_ind2 + (j - lo)); } ind = add_xor(q); q.clear(); add_not(ind); for ( j = i; j <= i + (S) - 1; j ++) { q.push_back(lo_ind1 + (j - lo)); } ind = add_or(q); q.clear(); q.push_back(ind - 1); q.push_back(ind); ind = add_and(q); answer.push_back(ind); ind ++; } return add_or(answer); } int not_greater_right (int H, int W, int S){ S ++; ll i, lo, hi, lo_ind1, r, lo_ind2, j; vector < int > v[502]; vector < int > answer; ind = H * W; lo = 1e9; hi= 0; for (i = 0; i < H; i ++) { for ( j = 0; j < W; j ++) { r = i + j ; lo = min(lo, r); hi = max(hi, r); v[r].push_back(i * W + j); } } lo_ind1 = -1; for (i = lo; i <= hi; i ++) { if ( lo_ind1 == -1) { lo_ind1 = add_or(v[i]); } else { add_or(v[i]); } } lo_ind2 = -1; for (i = lo; i <= hi; i ++) { if ( lo_ind2 == -1) { lo_ind2 = add_xor(v[i]); } else { add_xor(v[i]) ; } } for (i = lo; i + (S) - 1 <= hi; i ++) { vector < int > q; for ( j = i; j <= i + (S) - 1; j ++) { q.push_back(lo_ind2 + (j - lo)); } ind = add_xor(q); q.clear(); add_not(ind); q.clear(); for ( j = i; j <= i + (S) - 1; j ++) { q.push_back(lo_ind1 + (j - lo)); } ind = add_or(q); q.clear(); q.push_back(ind - 1); q.push_back(ind); ind = add_and(q); answer.push_back(ind); } return add_or(answer); } void construct_network(int H, int W, int K) { // left int a, b, c, d; vector < int > q; a = not_greater_left(H, W, K - 1); b = not_greater_left(H, W, K); c = not_greater_right(H, W, K - 1); d = not_greater_right(H, W, K); a = add_not(a); c = add_not(c); q.push_back(a); q.push_back(b); add_and(q); q.clear(); q.push_back(c); q.push_back(d); ind = add_and(q); q.clear(); q.push_back(ind); q.push_back(ind - 1); ind = add_or(q); q.clear(); q.push_back(b); q.push_back(d); q.push_back(ind); add_and(q); }
#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...