제출 #992100

#제출 시각아이디문제언어결과실행 시간메모리
992100ahoraSoyPeorTracks in the Snow (BOI13_tracks)C++14
100 / 100
1739 ms342904 KiB
#include <bits/stdc++.h>
using namespace std;

#define ff first
#define ss second
#define pb push_back

typedef long long ll;
typedef pair<int,int> pii;

const int S = 4000;
char meadow[S][S];
int dist[S][S];
bool vis[S][S];
const int INF = 1e8;

void reset(){
	for(int i = 0; i < S; i++){
		for(int j = 0; j < S; j++){
			dist[i][j] = INF;
		}
	}
}

const int delta_X[] = {-1, 1, 0, 0};
const int delta_Y[] = {0, 0, -1, 1};

bool is_in ( pii cell, int h, int w ) {
    return cell.ff >= 0 and cell.ss >= 0 and cell.ff < h and cell.ss < w;
}

int solve(int h, int w){

	reset();
	int ans = 0;
	pii start = {0,0};
	deque<pii> dq;
	dq.push_back(start);
	dist[0][0] = 0;
	while(dq.size()){
		auto [a, b] = dq.front(); dq.pop_front();
		
		if(vis[a][b]) continue;
		vis[a][b] = true;
		char animal = meadow[a][b];
		// obtener vecinos
		vector<pii> vecinos;
        for ( int i = 0; i < 4; ++i ) {
            pii nxt_cell = {a+delta_X[i], b+delta_Y[i]};
            if ( !is_in ( nxt_cell, h, w ) ) continue;
            char animal_cell = meadow[nxt_cell.ff][nxt_cell.ss];
            if ( animal_cell != '.' )
                vecinos.pb ( nxt_cell );
        }
		
		// iterar por vecinos
		for(auto [x,y]: vecinos){
			int d = 0;
			if(meadow[x][y] != animal){
				d = 1;
			}
			// if (dist[curr_node] + d > dist[to]) continue;
			if(dist[a][b] + d > dist[x][y]) continue;
			
			dist[x][y] = dist[a][b] + d;
			
			ans = max(ans, dist[x][y]);
			
			if(d == 1){
				dq.push_back({x,y});
			}
			else if(d == 0){
				dq.push_front({x,y});
			}
		}
		
	}
	return ans;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  
  int h, w; cin >> h >> w;
  

  for(int i = 0; i < h; ++i){
	  for(int j = 0; j < w; ++j){
		  char x; cin >> x;
		  meadow[i][j] = x;
	  }
  }
  cout << solve(h,w)+1; 
}

/*
 * 
 * 5 8
FFR.....
.FRRR...
.FFFFF..
..RRRFFR
.....FFF

5 5
FRFRF
RRFRF
FFFRF
RRRRF
FFFFF
 */

컴파일 시 표준 에러 (stderr) 메시지

tracks.cpp: In function 'int solve(int, int)':
tracks.cpp:41:8: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   41 |   auto [a, b] = dq.front(); dq.pop_front();
      |        ^
tracks.cpp:57:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   57 |   for(auto [x,y]: vecinos){
      |            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...