UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212678#3828. Beam2539Compile Error//C++112.8kb2024-10-20 09:27:402024-10-20 14:35:51

answer

 
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>

using namespace std;

struct Cell {
    int value;
    int x, y;
    int index;
};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int T;
    cin >> T;
    while(T--){
        int n, m;
        cin >> n >> m;
        
        vector<Cell> cells(n * m);
        for(int i=0; i<n; ++i){
            for(int j=0; j<m; ++j){
                int val;
                cin >> val;
                int idx = i * m + j;
                cells[idx] = Cell{val, i, j, idx};
            }
        }
        
        sort(cells.begin(), cells.end(), [](const Cell &a, const Cell &b) -> bool{
            return a.value < b.value;
        });
        
        vector<int> length(n * m, 1);
        vector<int> predecessor(n * m, -1);
        
        vector<pair<int, int>> directions = { {-1,0}, {1,0}, {0,-1}, {0,1} };
        
        for(auto &cell : cells){
            int curr_idx = cell.index;
            for(auto &dir : directions){
                int dx = dir.first;
                int dy = dir.second;
                int nx = cell.x + dx;
                int ny = cell.y + dy;
                if(nx >=0 && nx < n && ny >=0 && ny < m){
                    int neighbor_idx = nx * m + ny;
                    if(cells[neighbor_idx].value < cell.value){
                        if(length[neighbor_idx] + 1 > length[curr_idx]){
                            length[curr_idx] = length[neighbor_idx] +1;
                            predecessor[curr_idx] = neighbor_idx;
                        }
                        else if(length[neighbor_idx] +1 == length[curr_idx]){
                            if(predecessor[curr_idx] == -1 || cells[neighbor_idx].value < cells[predecessor[curr_idx]].value){
                                predecessor[curr_idx] = neighbor_idx;
                            }
                        }
                    }
                }
            }
        }
        
        int max_len = 0;
        int end_idx = -1;
        for(int i=0; i<n*m; ++i){
            if(length[i] > max_len){
                max_len = length[i];
                end_idx = i;
            }
            else if(length[i] == max_len){
                if(cells[i].value < cells[end_idx].value){
                    end_idx = i;
                }
            }
        }
        
        vector<int> path;
        int current = end_idx;
        while(current != -1){
            path.push_back(cells[current].value);
            current = predecessor[current];
        }
        reverse(path.begin(), path.end());
        
        cout << path.size() << "\n";
        for(int i=0; i<path.size(); ++i){
            if(i > 0) cout << " ";
            cout << path[i];
        }
        cout << "\n";
    }
}
 

Details

answer.code:1:1: error: stray '\302' in program
  \x0d
 ^
answer.code:1:1: error: stray '\240' in program
answer.code:98:1: error: stray '\302' in program
  
 ^
answer.code:98:1: error: stray '\240' in program