Submission #1300668

#TimeUsernameProblemLanguageResultExecution timeMemory
1300668settopTracks in the Snow (BOI13_tracks)C++20
100 / 100
651 ms102056 KiB
#include<bits/stdc++.h>

using namespace std;

#define fall(i,a,n) for(int i=a;i<=n;i++)
#define rfall(i,a,n) for(int i=a;i>=n;i--)
#define pb push_back
#define all(x) x.begin(),x.end()
#define sz(x) (int)x.size()
const int MAXN=4e3+10;
const int MAXL=22;

typedef tuple<int,int,int> trio;
typedef pair<int,int> pii;

int n,m;
char arr[MAXN][MAXN];
bool z[MAXN][MAXN];

int32_t main(){
	std::ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	//freopen("disrupt.in","r",stdin);
	//freopen("disrupt.out","w",stdout);

	cin>>n>>m;

	fall(i,1,n)
		fall(j,1,m) cin>>arr[i][j];
	
	deque<trio> fila;

	fila.pb({1,1,1});
	z[1][1]=1;

	int ans=0;
	while(!fila.empty()){
		auto [d,a,b]=fila.front(); fila.pop_front();
		ans=d;

		fall(x,-1,1)
			fall(y,-1,1){
				if(abs(x)+abs(y)!=1) continue;
				int nx=x+a,ny=y+b;

				if(arr[nx][ny]!='R' && arr[nx][ny]!='F') continue;

				if(z[nx][ny]) continue;

				if(arr[nx][ny]==arr[a][b]){
					z[nx][ny]=1;
					fila.push_front({d,nx,ny});
				}
				else{
					z[nx][ny]=1;
					fila.pb({d+1,nx,ny});
				}
			}
	}

	cout<<ans<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...