Submission #1217974

#TimeUsernameProblemLanguageResultExecution timeMemory
1217974mychecksedadNavigation 2 (JOI21_navigation2)C++20
100 / 100
297 ms884 KiB
#include "Anna.h" #include<bits/stdc++.h> using namespace std; #define ll long long int #define MOD (1000000000+7) #define MOD1 (998244353) #define pb push_back #define all(x) x.begin(), x.end() #define en cout << '\n' #define ff first #define ss second #define pii pair<int,int> #define vi vector<int> const int N = 3e6+100, M = 1e5+10, K = 52, MX = 30, FFF = 1e8+1; namespace { int FunctionExample(int r, int c, int K) { return (r + c) % K + 1; } } // namespace void Anna(int n, int k, std::vector<int> R, std::vector<int> C) { int arr[3][3] = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8} }; array<array<int, 3>, 3> order = {array<int,3>{-1, -1, -1}, array<int,3>{-1, -1, -1}, array<int,3>{-1, -1, -1}}; bool done = false; int X, Y; for(int x = 0; x < 3; ++x){ for(int y = 0; y < 3; ++y){ int cur = 0; bool bad = 0; for(int i = 0; i < 3; ++i){ for(int j = 0; j < 3; ++j){ if((i==0 && j==0) || (i==1 && j==1)) continue; int posx = R[cur] % 3; int posy = C[cur] % 3; if(posx == (i+x)%3 && posy == (j+y)%3){ bad = 1; } cur++; } } if(!bad){ X = x; Y = y; done = 1; cur = 0; for(int i = 0; i < 3; ++i){ for(int j = 0; j < 3; ++j){ if((i==0 && j==0) || (i==1 && j==1)) continue; int posx = R[cur] % 3; int posy = C[cur] % 3; order[(i+x)%3][(j+y)%3] = cur; cur++; } } break; } } if(done) break; } assert(done); int X2 = (X+1)%3; int Y2 = (Y+1)%3; int a = X*3 + Y; int b = X2*3 + Y2; if(a>b) swap(a, b); // cerr << a << ' ' << b << '\n'; bitset<9> used; for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ int pos = order[i%3][j%3]; if(pos != -1){ int x_dif = R[pos] - i, y_dif = C[pos] - j; if(abs(x_dif) <= 1 && abs(y_dif) <= 1){ used[(x_dif + 1) * 3 + y_dif + 1] = 1; } } } } int crap = 0; for(int i = 0; i < 9; ++i) if(!used[i] && i != 4){ crap = i; } int crap2 = 4; if(crap > crap2) swap(crap, crap2); for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ int pos = order[i%3][j%3]; if(i % 3 == X && j % 3 == Y){ SetFlag(i, j, 12); }else if(i % 3 == X2 && j % 3 == Y2){ SetFlag(i, j, (crap == 4 ? crap2 : crap) + 1); }else{ int x_dif = R[pos] - i, y_dif = C[pos] - j; if(abs(x_dif) <= 1 && abs(y_dif) <= 1){ int val = arr[x_dif + 1][y_dif + 1]; if(val >= crap2) --val; if(val >= crap) --val; SetFlag(i, j, val + 1); }else{ if(abs(y_dif) >= abs(x_dif)){ if(y_dif > 0) SetFlag(i, j, 8); else SetFlag(i, j, 9); }else{ if(x_dif > 0) SetFlag(i, j, 10); else SetFlag(i, j, 11); } } } } } }
#include "Bruno.h" #include<bits/stdc++.h> using namespace std; #define ll long long int #define MOD (1000000000+7) #define MOD1 (998244353) #define pb push_back #define all(x) x.begin(), x.end() #define en cout << '\n' #define ff first #define ss second #define pii pair<int,int> #define vi vector<int> const int N = 3e6+100, M = 1e5+10, K = 52, MX = 30, FFF = 1e8+1; namespace { int variable_example = 1; } // namespace std::vector<int> Bruno(int k, std::vector<int> value) { std::vector<int> res(k, 0); int x = 0, y = 0; vector<vector<int>> v(3, vi(3)); for(int i = 0; i < 3; ++i) for(int j =0 ; j < 3; ++j) v[i][j] = value[i*3 + j]; for(int i = 0; i < 3; ++i){ for(int j = 0; j < 3; ++j) if(v[i][j] == 12) x = i, y = j; } int crap = 4; int crap2 = (v[(x+1)%3][(y+1)%3]) - 1; if(crap > crap2) swap(crap, crap2); int arr[9][2] = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 0}, {0, 1}, {1, -1}, {1, 0}, {1, 1} }; int cur = 0; for(int i = 0; i < 3; ++i){ for(int j = 0; j < 3; ++j){ if((i==0 && j==0) || (i==1 && j==1)) continue; int X = (i+x) % 3, Y = (j+y) % 3; if(v[X][Y] <= 7){ int w = v[X][Y] - 1; if(w >= crap) ++w; if(w >= crap2) ++w; int new_x = arr[w][0] + X, new_y = arr[w][1] + Y; int x_dif = new_x - 1, y_dif = new_y - 1; if(x_dif == 0 && y_dif == 0) res[cur] = 4; else if(y_dif > 0) res[cur] = 0; else if(y_dif < 0) res[cur] = 1; else if(x_dif > 0) res[cur] = 2; else res[cur] = 3; }else{ res[cur] = v[X][Y] - 8; } ++cur; } } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...