UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212676#3828. Beam2539Compile Error//C++112.7kb2024-10-20 09:22:332024-10-20 14:35:47

answer

#include <bits/stdc++.h>
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 &{dx, dy} : directions){
                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: In function 'int main()':
answer.code:41:23: error: expected unqualified-id before '{' token
             for(auto &{dx, dy} : directions){\x0d
                       ^
answer.code:41:24: error: 'dx' was not declared in this scope
             for(auto &{dx, dy} : directions){\x0d
                        ^
answer.code:41:28: error: 'dy' was not declared in this scope
             for(auto &{dx, dy} : directions){\x0d
                            ^