Submission #475936

#TimeUsernameProblemLanguageResultExecution timeMemory
475936qwerasdfzxclNavigation 2 (JOI21_navigation2)C++17
100 / 100
871 ms1008 KiB
#include "Anna.h" #include <bits/stdc++.h> typedef long long ll; using namespace std; namespace { } // namespace void Anna(int N, int K, std::vector<int> R, std::vector<int> C) { bool chk[9]; fill(chk, chk+9, 0); for (int i=0;i<K;i++){ int num = (R[i]*3+C[i]+1)%9; chk[((i+10)-num)%9] = 1; } int typ = -1; for (int i=0;i<9;i++) if (!chk[i]) {typ = i; break;} assert(typ!=-1); fill(chk, chk+9, 0); for (int i=0;i<N;i++){ for (int j=0;j<N;j++){ int num = (i*3+j+typ+1)%9; if (!num) SetFlag(i, j, 12); else if (num==8) continue; //SetFlag(i, j, 1); else{ num--; if (R[num]<i-1) SetFlag(i, j, 4); else if (R[num]>i+1) SetFlag(i, j, 3); else if (C[num]<j-1) SetFlag(i, j, 2); else if (C[num]>j+1) SetFlag(i, j, 1); else{ for (int x=-1, val=5;x<=1;x++){ for (int y=-1;y<=1;y++) if (x || y){ if (i+x==R[num] && j+y==C[num]){ chk[val-5] = 1; } val++; } } } } } } int typ2 = -1; for (int i=0;i<8;i++) if (!chk[i]) {typ2 = i; break;} assert(typ2!=-1); for (int i=0;i<N;i++){ for (int j=0;j<N;j++){ int num = (i*3+j+typ+1)%9; if (!num) continue; else if (num==8) SetFlag(i, j, typ2+1); else{ num--; if (R[num]<i-1) continue; else if (R[num]>i+1) continue; else if (C[num]<j-1) continue; else if (C[num]>j+1) continue; else{ for (int x=-1, val=5;x<=1;x++){ for (int y=-1;y<=1;y++) if (x || y){ if (i+x==R[num] && j+y==C[num]){ if (val>typ2+5) val--; SetFlag(i, j, val); } val++; } } } } } } }
#include "Bruno.h" #include <bits/stdc++.h> typedef long long ll; using namespace std; namespace { } // namespace std::vector<int> Bruno(int K, std::vector<int> value) { vector<int> ret(7); int pivot = -1; for (int i=0;i<9;i++) if (value[i]==12) pivot = i; assert(pivot!=-1); int typ2 = -1; for (int i=-1, k=0;i<=1;i++){ for (int j=-1;j<=1;j++, k++){ int num = 0; num += (i-pivot/3+1)*3 + (j-pivot%3+1); num = (num+90)%9; if (num==8) typ2 = value[k]; } } typ2--; assert(typ2!=-1); for (int i=-1, k=0;i<=1;i++){ for (int j=-1;j<=1;j++, k++){ int num = 0; num += (i-pivot/3+1)*3 + (j-pivot%3+1); num = (num+90)%9; if (num==0 || num==8) continue; num--; if (value[k]<=4) ret[num] = value[k]-1; else{ if (value[k]>=typ2+5) value[k]++; int ex = -1e9, ey = -1e9; for (int x=-1, val=5;x<=1;x++){ for (int y=-1;y<=1;y++) if (x || y){ if (value[k]==val) ex = i+x, ey = j+y; val++; } } assert(ex!=-1e9 && ey!=-1e9); if (ex<0) ret[num] = 3; else if (ex>0) ret[num] = 2; else if (ey<0) ret[num] = 1; else if (ey>0) ret[num] = 0; else ret[num] = 4; } } } return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...