# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1133691 | KhoaDuy | Navigation 2 (JOI21_navigation2) | C++20 | 282 ms | 880 KiB |
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
void Anna(int n,int k,vector<int> r,vector<int> c){
int pos[3][3];
memset(pos,0,sizeof(pos));
for(int i=0;i<k;i++){
pos[r[i]%3][c[i]%3]=1;
}
vector<pair<int,int>> unuse;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(pos[i][j]==0&&unuse.size()<2){
unuse.push_back({i,j});
}
else{
pos[i][j]=1;
}
}
}
int dx[]={-1,-1,0,1};
int dy[]={0,1,1,1};
for(int k=0;k<4;k++){
if((unuse.back().first+dx[k]+3)%3==unuse[0].first&&(unuse.back().second+dy[k]+3)%3==unuse[0].second){
swap(unuse[0],unuse[1]);
break;
}
}
int ptr=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
int x=unuse[0].first+i,y=unuse[0].second+j;
x%=3,y%=3;
if(pos[x][y]==0){
for(int a=x;a<n;a+=3){
for(int b=y;b<n;b+=3){
SetFlag(a,b,12);
}
}
continue;
}
ptr++;
pos[x][y]=ptr;
}
}
ptr=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
int x=unuse[0].first+i,y=unuse[0].second+j;
x%=3,y%=3;
if(pos[x][y]==0){
continue;
}
for(int a=x;a<n;a+=3){
for(int b=y;b<n;b+=3){
if(abs(a-r[ptr])<=1&&abs(b-c[ptr])<=1){
SetFlag(a,b,pos[r[ptr]%3][c[ptr]%3]);
}
else{
int val=-9;
if(b-1>c[ptr]){
val=1;
}
else if(a-1>r[ptr]){
val=3;
}
else if(b+1<c[ptr]){
val=0;
}
else if(a+1<r[ptr]){
val=2;
}
val+=8;
SetFlag(a,b,val);
}
}
}
ptr++;
}
}
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> Bruno(int k,vector<int> value){
vector<int> ans;
vector<pair<int,int>> unuse;
int pos[3][3];
memset(pos,0,sizeof(pos));
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(value[i*3+j]==12){
unuse.push_back({i,j});
}
else{
pos[i][j]=1;
}
}
}
int dx[]={-1,-1,0,1};
int dy[]={0,1,1,1};
for(int k=0;k<4;k++){
if((unuse.back().first+dx[k]+3)%3==unuse[0].first&&(unuse.back().second+dy[k]+3)%3==unuse[0].second){
swap(unuse[0],unuse[1]);
break;
}
}
vector<pair<int,int>> convert;
convert.push_back({-1,-1});
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
int x=unuse[0].first+i,y=unuse[0].second+j;
x%=3,y%=3;
if(pos[x][y]!=0){
convert.push_back({x,y});
}
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
int x=unuse[0].first+i,y=unuse[0].second+j;
x%=3,y%=3;
if(pos[x][y]==0){
continue;
}
if(value[x*3+y]>=8){
ans.push_back(value[x*3+y]-8);
continue;
}
int x2=convert[value[x*3+y]].first,y2=convert[value[x*3+y]].second;
while(x2-x>=2){
x2-=3;
}
while(x-x2>=2){
x2+=3;
}
while(y2-y>=2){
y2-=3;
}
while(y-y2>=2){
y2+=3;
}
if(y2>1){
ans.push_back(0);
}
else if(y2<1){
ans.push_back(1);
}
else if(x2>1){
ans.push_back(2);
}
else if(x2<1){
ans.push_back(3);
}
else{
ans.push_back(4);
}
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |