额等等,k忘了等于零了,再试试。。
by startlearning @ 2023-12-10 22:16:12
行叭,过了,一个是右边界和下边界少了等于号,导致最右和最下丢了俩1..一个就是k没看0;```cpp
#include<iostream>
using namespace std;
int main()
{
//分别输入矩阵长度,火把数,萤石数
int n, m, k;
cin >> n >> m >> k;
// 动态二维数组创立
int** p = new int* [n];
for (int i = 0; i < n; i++)
p[i] = new int[n];
//先把所有部位定成暗(0);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
p[i][j] = 0;
//分别考虑火把和萤石的影响
for (int i = 0; i < m; i++)
{
int x, y;
cin >> x >> y;
for (int i = y - 1 - 2; i <= y - 1 + 2; i++)
if (i >= 0 && i < n)p[i][x-1] = 1;
for (int j = x - 1 - 2; j <= x - 1 + 2; j++)
if (j >= 0 && j < n)p[y - 1][j] = 1;
if (x - 2 >= 0 && y - 2 >= 0)p[y - 2][x - 2] = 1;
if (x - 2 >= 0 && y < n)p[y][x - 2] = 1;
if (x <n && y - 2 >= 0)p[y - 2][x] = 1;
if (x <n && y <n)p[y][x] = 1;
}
if(k)
{
for (int i = 0; i < k; i++)
{
int x, y;
cin >> y >> x;
for(int j=x-1-2;j<=x-1+2;j++)
for(int f=y-1-2;f<=y-1+2;f++)
if(j>=0&&j<=n-1&&f>=0&&f<=n-1)p[f][j] = 1;
}
}
int num = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (p[i][j] == 0)num++;
cout << num << endl;
return 0;
}
```
by startlearning @ 2023-12-10 22:22:21