Submission #1344400

#TimeUsernameProblemLanguageResultExecution timeMemory
1344400StefanSebezNavigation 2 (JOI21_navigation2)C++20
100 / 100
379 ms992 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
namespace {
const int N=110;
int col[N][N],flag[N][N];
}
void Anna(int n,int K,vector<int>R,vector<int>C){
	for(int dx=0;dx<=2;dx++)for(int dy=0;dy<=2;dy++){
		for(int i=0;i<n;i++)for(int j=0;j<n;j++)col[i][j]=flag[i][j]=0;
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if((i+dx)%3==0){
					if((j+dy)%3==0)col[i][j]=7;
					else if((j+dy)%3==1)col[i][j]=8;
					else col[i][j]=0;
				}
				if((i+dx)%3==1)col[i][j]=(j+dy)%3+1;
				if((i+dx)%3==2)col[i][j]=(j+dy)%3+4;
			}
		}
		for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(col[i][j]!=8){
			if(col[i][j]==7){
				flag[i][j]=14;
				continue;
			}
			int c=col[i][j];
			if(R[c]==i-1&&C[c]==j-1)flag[i][j]=1;
			else if(R[c]==i-1&&C[c]==j)flag[i][j]=2;
			else if(R[c]==i-1&&C[c]==j+1)flag[i][j]=3;
			else if(R[c]==i&&C[c]==j-1)flag[i][j]=4;
			else if(R[c]==i&&C[c]==j)flag[i][j]=5;
			else if(R[c]==i&&C[c]==j+1)flag[i][j]=6;
			else if(R[c]==i+1&&C[c]==j-1)flag[i][j]=7;
			else if(R[c]==i+1&&C[c]==j)flag[i][j]=8;
			else if(R[c]==i+1&&C[c]==j+1)flag[i][j]=9;
			else if(C[c]>j+1)flag[i][j]=10;
			else if(C[c]<j-1)flag[i][j]=11;
			else if(R[c]>i+1)flag[i][j]=12;
			else if(R[c]<i-1)flag[i][j]=13;
		}
		int num[15]={0};
		for(int i=0;i<n;i++)for(int j=0;j<n;j++)num[flag[i][j]]++;
		if(num[9]==0){
			int val=0;
			for(int i=1;i<=8;i++)if(num[i]==0)val=i;
			for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(col[i][j]==8){
				flag[i][j]=val;
			}
			for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(col[i][j]!=8){
				if(flag[i][j]>9)flag[i][j]--;
				if(flag[i][j]>val)flag[i][j]--;
			}
			for(int i=0;i<n;i++)for(int j=0;j<n;j++)SetFlag(i,j,flag[i][j]);
			return;
		}
	}
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
vector<int> Bruno(int K,vector<int>value) {
	vector<int>res(K,0);
	int col[3][3];
	int x,y;
	for(int i=0;i<9;i++)if(value[i]==12)x=i/3,y=i%3;
	col[x][y]=7;
	col[x][(y+1)%3]=8;
	col[x][(y+2)%3]=0;
	col[(x+1)%3][y]=1;
	col[(x+1)%3][(y+1)%3]=2;
	col[(x+1)%3][(y+2)%3]=3;
	col[(x+2)%3][y]=4;
	col[(x+2)%3][(y+1)%3]=5;
	col[(x+2)%3][(y+2)%3]=6;
	int val=0;
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)if(col[i][j]==8)val=value[i*3+j];
	for(int i=0;i<9;i++){
		if(value[i]>=val)value[i]++;
		if(value[i]>=9)value[i]++;
	}
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)if(col[i][j]<=6){
		int c=col[i][j];int v=value[i*3+j];
		if(v<=9){
			int x,y;
			if(v==1)x=i-1,y=j-1;
			if(v==2)x=i-1,y=j;
			if(v==3)x=i-1,y=j+1;
			if(v==4)x=i,y=j-1;
			if(v==5)x=i,y=j;
			if(v==6)x=i,y=j+1;
			if(v==7)x=i+1,y=j-1;
			if(v==8)x=i+1,y=j;
			if(v==9)x=i+1,y=j+1;
			if(y>1)res[c]=0;
			else if(y<1)res[c]=1;
			else if(x>1)res[c]=2;
			else if(x<1)res[c]=3;
			else res[c]=4;
		}
		else res[c]=v-10;
	}
	return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...