제출 #1329020

#제출 시각아이디문제언어결과실행 시간메모리
1329020PlayVoltzNavigation 2 (JOI21_navigation2)C++20
0 / 100
0 ms816 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};

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=0; i<3; ++i)for (int j=0; j<3; ++j)if ((r[p]-1+i)%3==dy[p]&&(c[p]-1+j)%3==dx[p])res[r[p]-1+i][c[p]-1+j]=i*3+j+1;
	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 (!res[i][j]){
		if (j/3<c[p]/3)res[i][j]=10;
		else if (j/3>c[p]/3)res[i][j]=11;
		else if (i<r[p])res[i][j]=12;
		else res[i][j]=13;
	}
	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

pii query(int y, int x, int a){
	if (a==1)return mp(y+1, x+1);
	else if (a==2)return mp(y+1, x);
	else if (a==3)return mp(y+1, x-1);
	else if (a==4)return mp(y, x+1);
	else if (a==5)return mp(y, x);
	else if (a==6)return mp(y, x-1);
	else if (a==7)return mp(y-1, x+1);
	else if (a==8)return mp(y-1, x);
	else return mp(y-1, x-1);
}

vector<int> Bruno(int k, vector<int> val){
	vector<int> ans(k);
	vector<pii> rel(9), rev(9);
	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{
			pii c=query(rev[i].fi, rev[i].se, vect[i]);
			if (cx<c.se)ans[i]=0;
			else if (cx>c.se)ans[i]=1;
			else if (cy<c.fi)ans[i]=2;
			else if (cy>c.fi)ans[i]=3;
			else ans[i]=4;
		}
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...