Submission #1133691

#TimeUsernameProblemLanguageResultExecution timeMemory
1133691KhoaDuyNavigation 2 (JOI21_navigation2)C++20
100 / 100
282 ms880 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 timeMemoryGrader output
Fetching results...