Submission #1171687

#TimeUsernameProblemLanguageResultExecution timeMemory
1171687PedroBigManNavigation 2 (JOI21_navigation2)C++20
100 / 100
295 ms876 KiB
#include "Anna.h"
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <list>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
#include <cstring>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
#define REP(i,a,b) for(ll i=(ll) a; i<(ll) b; i++)
#define pb push_back
#define mp make_pair
#define pl pair<ll,ll>
#define ff first
#define ss second
#define whole(x) x.begin(),x.end()
#define DEBUG(i) cout<<"Pedro Is The Master "<<i<<endl
#define INF 500000000LL
#define EPS 0.00000001
#define pi 3.14159

namespace 
{
	
} 

void Anna(int N, int K, vector<int> R,vector<int> C) 
{
	pl anchor={-1,-1}; vector<bool> used; REP(i,0,9) {used.pb(false);}
	//cout<<"Anna 1"<<endl;
	REP(i,0,7)
	{
		ll spe = (3*R[i]+C[i])%9; 
		used[spe]=true;
	}
	//cout<<"Anna 2"<<endl;
	REP(i,0,9) 
	{
		if(!used[i])
		{
			if(anchor.ff==-1) {anchor.ff=i;}
			else if(anchor.ss==-1) {anchor.ss=i;}
		}
	}
	if((anchor.ss-anchor.ff+9)%9 >4) {swap(anchor.ff,anchor.ss);}
	ll z = (anchor.ss-anchor.ff+9)%9;
	REP(i,0,N) 
	{
		REP(j,0,N) 
		{
			ll spe = (3*i+j)%9; spe-=anchor.ff; spe=(spe+9)%9; 
			if(spe==0 || spe==z) {SetFlag(i,j,12); continue;}
			spe--; if(spe>=z) {spe--;}
			ll x = R[spe]; ll y = C[spe];
			if(max(abs(x-i),abs(y-j))<=1) 
			{
				ll curflag=1;
				REP(p,0,9)
				{
					ll shift_x=-1+(p/3); ll shift_y=-1+(p%3);
					spe = (3*(i+shift_x)+j+shift_y)%9; spe-=anchor.ff; spe=(spe+18)%9;  
					if(spe==0 || spe==z) {continue;}
					if(x==i+shift_x && y==j+shift_y) {SetFlag(i,j,curflag);break;}
					curflag++;
				}
			}
			else if(abs(x-i)>=2)
			{
				if(x>i) {SetFlag(i,j,10);}
				else {SetFlag(i,j,11);}
				continue;
			}
			else if(abs(y-j)>=2)
			{
				if(y>j) {SetFlag(i,j,8);}
				else {SetFlag(i,j,9);}
				continue;
			}
		}
	}
}
#include "Bruno.h"
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <list>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
#include <cstring>
using namespace std;
typedef int ll;
typedef unsigned long long int ull;
typedef long double ld;
#define REP(i,a,b) for(ll i=(ll) a; i<(ll) b; i++)
#define pb push_back
#define mp make_pair
#define pl pair<ll,ll>
#define ff first
#define ss second
#define whole(x) x.begin(),x.end()
#define DEBUG(i) cout<<"Pedro Is The Master "<<i<<endl
#define INF 500000000LL
#define EPS 0.00000001
#define pi 3.14159

namespace 
{
	template<class A=ll> 
	void Out(vector<A> a) {REP(i,0,a.size()) {cout<<a[i]<<" ";} cout<<endl;}
} 

vector<int> Bruno(int K, vector<int> f) 
{
	//cout<<"DEBUG"<<endl;
	vector<int> spe;
	REP(i,0,9) {spe.pb(-1);}
	pl bad={-1,-1};
	REP(i,0,9)
	{
		if(f[i]==12) 
		{
			if(bad.ff==-1) {bad.ff=i;} else {bad.ss=i;}
		}
	}
	ll z = bad.ss-bad.ff; if(z>4) {swap(bad.ff,bad.ss); z=-z+9; z=z%9;}
	REP(i,0,9)
	{
		ll sp = (i - bad.ff + 9)%9; 
		if(sp==0 || sp==z) {spe[i]=-1; continue;}
		sp--; if(sp>=z) {sp--;}
		spe[i]=sp;
	}
	vector<ll> ans; REP(i,0,K) {ans.pb(-1);}
	REP(i,0,9)
	{
		if(spe[i]==-1) {continue;}
		ll ind = spe[i];
		if(f[i]<=7)
		{
			ll val = f[i];
			ll shift_x,shift_y;
			ll curflag=1;
			REP(p,0,9)
			{
				shift_x=-1+(p/3); shift_y=-1+(p%3);
				ll index = i+3*shift_x+shift_y+9; index=index%9; if(index==bad.ff || index==bad.ss) {continue;}
				if(val==curflag) {break;}
				curflag++;
			}
			ll x = (i/3)-1; ll y = (i%3)-1;
			x+=shift_x; y+=shift_y;
			if(y<0) {ans[ind]=1;}
			else if(y>0) {ans[ind]=0;}
			else if(x<0) {ans[ind]=3;}
			else if(x>0) {ans[ind]=2;}
			else {ans[ind]=4;}
		}
		else
		{
			ans[ind]=f[i]-8;
		}
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...