Submission #1329103

#TimeUsernameProblemLanguageResultExecution timeMemory
1329103PlayVoltzNavigation 2 (JOI21_navigation2)C++20
0 / 100
0 ms700 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){
	for (int b=0; b<9; ++b){
		vector<vector<int> > res(n, vector<int>(n, 0));
		for (int i=2+b/3; i<n+b/3; i+=3)for (int j=2+b%3; j<n+b%3; j+=3)res[i%n][j%n]=14;
		set<int> s;
		for (int i=1; i<=9; ++i)s.insert(i);
		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]+b/3)%3&&(c[p]-1+j)%3==(dx[p]+b%3)%3)res[r[p]-1+i][c[p]-1+j]=i*3+j+1, s.erase(i*3+j+1);
		for (int p=0; p<k; ++p)for (int i=dy[p]+b/3; i<n+b/3; i+=3)for (int j=dx[p]+b%3; j<n+b%3; j+=3)if (!res[i%n][j%n]){
			if (j+1<c[p])res[i%n][j%n]=10;
			else if (j>c[p]+1)res[i%n][j%n]=11;
			else if (i+1<r[p])res[i%n][j%n]=12;
			else res[i%n][j%n]=13;
		}
		if (*(--s.end())!=9)continue;
		for (int i=0; i<n; ++i)for (int j=0; j<n; ++j)if (res[i][j]>=10)--res[i][j];
		for (int i=0; i<n; ++i)for (int j=0; j<n; ++j)if (res[i][j]>=*s.begin()+1)--res[i][j];
		for (int i=0; i<n; ++i)for (int j=0; j<n; ++j)SetFlag(i, j, (res[i][j]?res[i][j]:*s.begin()));
		return;
	}
}
#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]==12)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);
	for (int i=0; i<k; ++i)if (vect[i]>=vect[7])++vect[i];
	for (int i=0; i<k; ++i)if (vect[i]>=9)++vect[i];
	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...