Submission #959513

#TimeUsernameProblemLanguageResultExecution timeMemory
959513AkibAzmainVision Program (IOI19_vision)C++17
100 / 100
12 ms1680 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

void construct_network(int h, int w, int k)
{
  auto gv = [&] (int x, int y)
  {
    return x * w + y;
  };
  auto fa = [] (int a, int b, int x)
  {
    return make_pair (add_xor ({ a, b, x }),
                      add_or ({ add_and ({ a, b }),
                          add_and ({ b, x }),
                          add_and ({ x, a }) }));
  };
  int nl = add_and ({ gv (0, 0), add_not (gv (0, 0)) });
  int ob = add_not (nl);
  vector < vector < int > > a;
  a.push_back ({ nl });
  for (int i = 0; i < h; ++i)
    {
      vector < int > xa (w + 1);
      for (int j = 0; j < w; ++j) xa[j] = gv (i, j);
      xa[w] = a.back ()[0];
      a.push_back ({ add_xor (xa) });
    }
  for (int j = 0; j < w; ++j)
    {
      vector < int > xa (h + 1);
      for (int i = 0; i < h; ++i) xa[i] = gv (i, j);
      xa[h] = a.back ()[0];
      a.push_back ({ add_xor (xa) });
    }
  while (a.size () != 512) a.push_back ({ nl });
  while (a.size () > 1)
    {
      vector < vector < int > > a2;
      for (int i = 0; i < a.size (); i += 2)
        {
          vector < int > bs (a[i].size () + 1, nl);
          for (int j = 0; j < a[i].size (); ++j)
            tie (bs[j], bs[j + 1]) = fa (a[i][j], a[i + 1][j], bs[j]);
          a2.push_back (bs);
        }
      swap (a, a2);
    }
  vector < int > ans (9);
  for (int i = 0; i < 9; ++i) ans[i] = add_xor ({ a[0][i], ((k & (1 << i)) ? ob : nl) });
  add_not (add_or (ans));
}

Compilation message (stderr)

vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:41:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |       for (int i = 0; i < a.size (); i += 2)
      |                       ~~^~~~~~~~~~~
vision.cpp:44:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |           for (int j = 0; j < a[i].size (); ++j)
      |                           ~~^~~~~~~~~~~~~~
#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...