c++题解
查看原帖
c++题解
1751052
unlucking楼主2025/6/21 11:57
#include<iostream>
using namespace std;
#include<vector>
//将有物品和亮光的的位置设置为1;其他为0;
void stone(vector <vector <int>>& vec, int x, int y, int scope) {//萤石的点亮范围,其中需要的参数分别为:二位数组,物品的行和列的位置,数组的最大的范围。
    for (int i = x - 2;i <= x + 2;i++) {
        for (int j = y - 2;j <= y + 2;j++) {
            if (i >= 0 && i < scope && j >= 0 && j < scope && vec[i][j] != 1) {
                vec[i][j] = 1;
            }
        }
    }
}
void torch(vector <vector <int>>& vec, int x, int y, int scope) {//火把的点亮范围
    for(int i = x - 2;i <= x+2;i++){
        if(i>= 0 && i < scope){
            vec[i][y] = 1;
        }
    }
    for(int i = y - 2;i<=y+2;i++){
        if(i>= 0 && i < scope){
            vec[x][i] = 1;
        }
    }
    if(x-1>=0 && y-1>0)vec[x-1][y-1] = 1;
    if(x-1>=0 && y+1<scope)vec[x-1][y+1] = 1;
    if(x+1<scope && y-1>0)vec[x+1][y-1] = 1;
    if(x+1<scope && y+1<scope)vec[x+1][y+1] = 1;
}
int main() {
    int n, m, k;cin >> n >> m >> k;
    vector<vector<int>> arr(n,vector<int>(n, 0));
    for (int i = 0;i < m;i++) {
        int r, c;cin >> r >> c;
        r--;c--;//将输入的位置与创建的图对齐
        torch(arr, r, c, n);
    }
    for (int i = 0;i < k;i++) {
        int r, c;cin >> r >> c;
        r--;c--;//将输入的位置与创建的图对齐
        stone(arr, r, c, n);
    }
    int ans = 0;
    for(int i = 0;i<n;i++){
        for(int j = 0;j<n;j++){
            if(arr[i][j] == 0) ans++;
        }
    }
    cout << ans;
    return 0;
}
2025/6/21 11:57
加载中...