阿里巴巴4.19笔试
太菜了,最后,90,55,10
第二题感觉没问题,但是一直错,大佬帮看看
#include<bits/stdc++.h>
using namespace std;
int n, m;
vector<vector<pair<char, int>>> board;
vector<vector<bool>> visited;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
bool isValid(int x, int y){
return x >= 0 && x < n && y >= 0 && y < m;
}
int dfs(int x, int y, char color){
if(!isValid(x, y) || visited[x][y] || board[x][y].first != color) return 0;
visited[x][y] = true;
int score = board[x][y].second;
// cout << "score" << endl;
for(int i = 0; i < 4; ++i){
int newX = x + dx[i];
int newY = y + dy[i];
score += dfs(newX, newY, color);
}
return score;
}
void drop(){
for(int j = 0; j < m; j++){
int empty = n - 1;
for(int i = n - 1; i >= 0; i--){
// if(visited[i][j]) continue;
if(board[i][j].first == ' ' || visited[i][j]) continue;
board[empty][j] = board[i][j];
visited[empty][j] = visited[i][j];
empty--;
}
for(; empty >= 0; empty--){
board[empty][j] = make_pair(' ', 0); // ' '
visited[empty][j] = false;
}
}
}
int main(){
cin >> n >> m;
board.resize(n, vector<pair<char, int>>(m));
for(int i = 0; i < n; i++){
for(int j = 0; j < m; ++j){
string cell;
cin >> cell;
board[i][j] = make_pair(cell[0], cell[1] - '0');
}
}
int q;
cin >> q;
for(int i = 0; i < q; ++i){
int x, y;
cin >> x >> y;
x--;
y--;
// cout << x << "////" << y << endl;
visited.assign(n, vector<bool>(m, false));
int score = dfs(x, y, board[x][y].first);
if(score > 0) drop();
cout << score << endl;
}
return 0;
}
