Submission #1328978

#TimeUsernameProblemLanguageResultExecution timeMemory
1328978PlayVoltzNavigation 2 (JOI21_navigation2)C++20
0 / 100
0 ms676 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back

int dy[7]={0, 0, 0, 1, 1, 1, 2}, dx[7]={0, 1, 2, 0, 1, 2, 0};

int conv(int i, int j){
	if (i%3==0&&j%3==0)return 1;
	else if (i%3==0&&j%3==1)return 2;
	else if (i%3==0&&j%3==2)return 3;
	else if (i%3==1&&j%3==0)return 4;
	else if (i%3==1&&j%3==1)return 5;
	else if (i%3==1&&j%3==2)return 6;
	else if (i%3==2&&j%3==0)return 7;
	else if (i%3==2&&j%3==1)return 8;
	else return 9;
}

void Anna(int n, int k, vector<int> r, vector<int> c){
	vector<vector<int> > res(n, vector<int>(n, 0));
	for (int i=2; i<n; i+=3)for (int j=2; j<n; j+=3)res[i][j]=14;
	for (int p=0; p<k; ++p)for (int i=dy[p]; i<n; i+=3)for (int j=dx[p]; j<n; j+=3){
		if (j/3<c[p]/3)res[i][j]=10;
		else if (j/3>c[p]/3)res[i][j]=11;
		else if (i/3<r[p]/3)res[i][j]=12;
		else if (i/3>r[p]/3)res[i][j]=13;
		else res[i][j]=conv(r[p], c[j]);
	}
	for (int i=0; i<n; ++i)for (int j=0; j<n; ++j)SetFlag(i, j, (res[i][j]?res[i][j]:1));
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back

vector<int> Bruno(int k, vector<int> val){
	vector<int> ans(k), revs(20);
	vector<pii> rel(9), rev(20);
	vector<vector<int> > grid(3, vector<int>(3)), graph(5, vector<int>(5, 0));
	int id=-1;
	for (int i=0; i<9; ++i){
		grid[i/3][i%3]=val[i];
		if (val[i]==14)id=i;
	}
	for (int i=0; i<9; ++i)rel[i]=mp(i/3-id/3, i%3-id%3);
	for (int i=0; i<9; ++i)graph[2+rel[i].fi][2+rel[i].se]=val[i];
	vector<int> vect;
	for (int i=0; i<3; ++i)for (int j=0; j<3; ++j)vect.pb(grid[(id/3+1+i)%3][(id%3+1+j)%3]);
	for (int i=0; i<5; ++i)for (int j=0; j<5; ++j)if (graph[i][j])rev[i%3*3+j%3]=mp(i, j);
	int cy=3-id/3, cx=3-id%3;
	for (int i=0; i<k; ++i){
		if (vect[i]==10)ans[i]=0;
		else if (vect[i]==11)ans[i]=1;
		else if (vect[i]==12)ans[i]=2;
		else if (vect[i]==13)ans[i]=3;
		else{
			int y=rev[i].fi/3*3+(vect[i]-1)/3, x=rev[i].se/3*3+(vect[i]-1)%3;
			if (x>cx)ans[i]=0;
			else if (x<cx)ans[i]=1;
			else if (y>cy)ans[i]=2;
			else if (y<cy)ans[i]=3;
			else ans[i]=4;
		}
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...