Untitled

mail@pastecode.io avatar
unknown
plain_text
10 days ago
2.3 kB
3
Indexable
Never
#include <queue>
#include <vector>
#include <set>
#include <iostream>
#define MAX_N 100
using namespace std;

int map[MAX_N + 1][MAX_N + 1];
int visit[MAX_N + 1][MAX_N + 1];

struct cmp {
    bool operator()(pair<int, int> a, pair<int, int> b) {
        if (map[a.first][a.second] == map[b.first][b.second]) {
            if (a.first == b.first) {
                return a.second > b.second;  // Thay đổi dấu để ưu tiên cột nhỏ hơn
            }
            return a.first > b.first;  // Thay đổi dấu để ưu tiên hàng nhỏ hơn
        }
        return map[a.first][a.second] > map[b.first][b.second];  // Đảm bảo thứ tự từ nhỏ đến lớn
    }
};

priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;
set<pair<int, int>> medicine[3];  // Loại bỏ cmp vì set tự động sắp xếp

int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
int n;
int step;

void init(int N, int mDish[MAX_N][MAX_N]) {
    step = 1;
    n = N;
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) {
            map[i][j] = mDish[i][j];
            visit[i][j] = 0;
        }
    }
}

int dropMedicine(int mTarget, int mRow, int mCol, int mEnergy) {
    int remainEnergy = mEnergy;
    pq.push(make_pair(mRow, mCol));
    
    while (remainEnergy > 0 && !pq.empty()) {
        auto topPair = pq.top();
        pq.pop();
        
        int r = topPair.first;
        int c = topPair.second;
        
        if (visit[r][c] != 0) continue;  // Kiểm tra nếu đã thăm địa điểm này
        
        visit[r][c] = step++;
        medicine[mTarget].insert(make_pair(r, c));
        
        remainEnergy -= map[r][c];
        
        for (int k = 0; k < 4; k++) {
            int nx = r + dx[k];
            int ny = c + dy[k];
            if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && visit[nx][ny] == 0) {
                pq.push(make_pair(nx, ny));
            }
        }
    }
    
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cout << visit[i][j] << " ";
        }
        cout << endl;
    }
    
    return medicine[mTarget].size();
}

int cleanBacteria(int mRow, int mCol) {
    return -1;  // Cần triển khai logic cho hàm này nếu cần
}
Leave a Comment