Submission #1297687

#TimeUsernameProblemLanguageResultExecution timeMemory
1297687DeltaStructVision Program (IOI19_vision)C++20
100 / 100
8 ms3160 KiB
#include <bits/stdc++.h>
using namespace std;
#include "vision.h"

void construct_network(int h,int w,int n){
  if (h*w==2){
    add_or({0});
    return;
  }
  int zero = add_and({0,1,2});
  int one = add_not(zero);
  for (int i(0);i < 18;++i) add_or({zero});
  int b = one+1,c = one+18;
  for (int i(0);i < h;++i){
    vector<int> I = {c};
    for (int k(0);k < w;++k) I.emplace_back(i*w+k);
    c = add_xor(I);
    int t = c;
    for (int k(0);k < 9;++k,b+=2) add_xor({b,c}),c = add_and({b,c});
    b = c-17,c = t;
  }
  for (int i(0);i < w;++i){
    vector<int> I = {c};
    for (int k(0);k < h;++k) I.emplace_back(k*w+i);
    c = add_xor(I);
    int t = c;
    for (int k(0);k < 9;++k,b+=2) add_xor({b,c}),c = add_and({b,c});
    b = c-17,c = t;
  }
  vector<int> R;
  for (int i(0);i < 9;++i,b+=2) R.emplace_back((n>>i)&1?add_and({b,one}):add_xor({b,one}));
  add_and(R);
}
#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...