Submission #778403

#TimeUsernameProblemLanguageResultExecution timeMemory
778403kamelfanger83Vision Program (IOI19_vision)C++14
0 / 100
22 ms3076 KiB
#include "vision.h" #include <cassert> using namespace std; int log2(int n){ int res = 0, tres = 1; while(tres < n){ tres <<= 1; res++; } return res; } void construct_network(int H, int W, int K) { int log2H = log2(H) - 1; int log2W = log2(W) - 1; int z = add_and({0,1,2}); int o = add_not(z); vector<int> Hind; for (int divs = 0; divs < log2H; divs++) { vector<int> tN; for (int x = 0; x < H; ++x) { for (int y = 0; y < W; ++y) { if ((x >> divs) & 1) tN.push_back(x * W + y); } } Hind.push_back(add_xor(tN)); } for (int i = 0; i < log2W - log2H; ++i) { Hind.push_back(add_and({z})); } vector<int> Wind; for (int divs = 0; divs < log2W; divs++) { vector<int> tN; for (int x = 0; x < H; ++x) { for (int y = 0; y < W; ++y) { if ((y >> divs) & 1) tN.push_back(x * W + y); } } Wind.push_back(add_xor(tN)); } for (int i = 0; i < log2H - log2W; ++i) { Wind.push_back(add_and({z})); } assert(Hind.size() == Wind.size()); int addbits = max(log2H, log2W); vector<int> addeds, carries; addeds.push_back(add_xor({Wind[0], Hind[0]})); carries.push_back(add_and({Wind[0], Hind[0]})); for (int i = 1; i < addbits; ++i) { addeds.push_back(add_xor({Wind[i], Hind[i], carries[i - 1]})); int o1 = add_and({Wind[i], Hind[i]}); int o2 = add_and({carries[i - 1], Hind[i]}); int o3 = add_and({Wind[i], carries[i - 1]}); carries.push_back(add_or({o1, o2, o3})); } addeds.push_back(add_and({carries.back()})); vector<int> Kbits; for (int i = 0; i < addeds.size(); ++i) { if (K & 1) Kbits.push_back(add_and({o})); else Kbits.push_back(add_and({z})); K >>=1; } assert(K == 0); vector<int> XORS; for (int i = 0; i < addeds.size(); ++i) { XORS.push_back(add_xor({addeds[i], Kbits[i]})); } vector<int> NOTS; for (int i = 0; i < XORS.size(); ++i) { NOTS.push_back(add_not(XORS[i])); } add_and(NOTS); }

Compilation message (stderr)

vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:62:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |     for (int i = 0; i < addeds.size(); ++i) {
      |                     ~~^~~~~~~~~~~~~~~
vision.cpp:69:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |     for (int i = 0; i < addeds.size(); ++i) {
      |                     ~~^~~~~~~~~~~~~~~
vision.cpp:73:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |     for (int i = 0; i < XORS.size(); ++i) {
      |                     ~~^~~~~~~~~~~~~
#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...