Submission #1344659

#TimeUsernameProblemLanguageResultExecution timeMemory
1344659avighnaNavigation 2 (JOI21_navigation2)C++20
0 / 100
0 ms760 KiB
#include "Anna.h"
#include <bits/stdc++.h>

using namespace std;

namespace {

enum dir {
  ONE,
  TWO,
  THREE
};

}

void Anna(int N, int K, std::vector<int> R, std::vector<int> C) {
  auto serialize = [&](const vector<dir> &val) {
    int x = 0;
    for (const dir &i : val) {
      x = (3 * x + int(i));
    }
    return x + 1;
  };
  for (int r = 0; r < N; ++r) {
    for (int c = 0; c < N; ++c) {
      vector<dir> val;
      for (int i = 0; i < K; ++i) {
        if (c == C[i]) {
          val.push_back(r <= R[i] ? ONE : TWO);
          continue;
        }
        if (r == R[i]) {
          if (abs(C[i] - c) % 2 == 0) {
            val.push_back(THREE);
          } else {
            val.push_back(C[i] <= c ? ONE : TWO);
          }
        } else if (r == R[i] - 1) {
          if (C[i] <= c) {
            val.push_back(THREE);
          } else {
            val.push_back(ONE);
          }
        } else if (r == R[i] + 1) {
          if (C[i] <= c) {
            val.push_back(TWO);
          } else {
            val.push_back(THREE);
          }
        } else {
          if (r <= R[i]) {
            val.push_back(ONE);
          } else {
            val.push_back(TWO);
          }
        }
      }
      SetFlag(r, c, serialize(val));
    }
  }
}
#include "Bruno.h"
#include <bits/stdc++.h>

using namespace std;

namespace {

enum dir {
  ONE,
  TWO,
  THREE
};

}

vector<int> Bruno(int K, vector<int> value) {
  auto unserialize = [&](int x) {
    --x;
    vector<dir> res;
    for (int i = 0; i < 7; ++i) {
      res.push_back(dir(x % 3));
      x /= 3;
    }
    reverse(res.begin(), res.end());
    return res;
  };
  vector<int> ans;
  for (int i = 0; i < K; ++i) {
    vector vals(3, vector<dir>(3));
    for (int j = 0; j < 9; ++j) {
      vals[j / 3][j % 3] = unserialize(value[j])[i];
    }
    if (vals[0]==vector<dir>{ONE,ONE,THREE}&&vals[2]==vector<dir>{THREE,TWO,TWO}) {
      ans.push_back(4);continue;
    }
    if (vals[0]==vals[1]||vals[1]==vals[2]) {
      if (vals[1][1]==ONE) {
        ans.push_back(2);
      } else {
        ans.push_back(3);
      }
      continue;
    }
    if (vals[1]==vector<dir>{ONE,ONE,THREE}||vals[1]==vector<dir>{ONE,THREE,THREE}) {
      ans.push_back(2);continue;
    }
    if (vals[1]==vector<dir>{THREE,TWO,TWO}||vals[1]==vector<dir>{THREE,THREE,TWO}) {
      ans.push_back(3);continue;
    }
    if (vals[1]==vector<dir>{ONE,THREE,ONE}||vals[1]==vector<dir>{THREE,ONE,THREE}){
      ans.push_back(1);continue;
    }
    if (vals[1]==vector<dir>{TWO,THREE,TWO}||vals[1]==vector<dir>{THREE,TWO,THREE}){
      ans.push_back(0);continue;
    }
    if (vals[1][1]==TWO&&vals[0][1]==ONE&&vals[1][0]==THREE){
      ans.push_back(0);continue;
    }
    if (vals[1][1]==ONE&&vals[1][2]==THREE&&vals[2][1]==TWO){
      ans.push_back(1);continue;
    }
    cout<<"couldnt find match for:\n";
    for (int i=0;i<3;++i){
      for (int j=0;j<3;++j){
        cout<<int(vals[i][j])+1;
      }
      cout<<'\n';
    }
    assert(false);
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...