# K皇后
## 题目描述
小 Z 最近捡到了一个 $n$ 行 $m$ 列的棋盘,棋盘上的格子的横纵坐标从 $1$ 开始编号,他想在棋盘上摆放 $K$ 个皇后。他想知道在他摆完这 $K$ 个皇后之后,棋盘上还有多少个格子是不会被攻击到的。
**注意:一个皇后会攻击到这个皇后所在的那一行,那一列,以及两条对角线。**
## 输入格式
第一行三个正整数 $n,m,K$,表示棋盘的行列,以及小 Z 摆放的皇后的个数。
接下来 $K$ 行,每行两个正整数 $x,y$,表示这个皇后被摆在了第 $x$ 行,第 $y$ 列,数据保证任何两个皇后都不会被摆在同一个格子里。
## 输出格式
仅一个整数,表示棋盘上还有多少个格子是不会被攻击到的。
## 样例 #1
### 样例输入 #1
```
12 13 6
10 4
12 10
1 1
2 3
3 2
2 6
```
### 样例输出 #1
```
25
```
## 提示
- 对于 $30\%$ 的数据,$1\le n,m\le 5\times10^3$,$1\le K\le 500$;
- 对于另外 $10\%$ 的数据,$K=1$;
- 对于 $100\%$ 的数据,$1\le n,m\le 2\times 10^4$,$1\le K\le 500$。
#include<bits/stdc++.h>
using namespace std;
int x[600],y[600];
int a,b,c;
int flag[20010],q[20010],m,n;
int main()
{
cin>>a>>b>>c;
for(int i=1;i<=c;i++)
cin>>x[i]>>y[i],q[x[i]]=1;
for(int i=1;i<=a;i++)
{
if(q[i])
continue;
m=b;
for(int j=1;j<=c;j++)
{
if(flag[y[j]]!=i) m-=1;
flag[y[j]]=i;
if(x[j]<i)
{
if(y[j]+i-x[j]>=1&&y[j]+i-x[j]<=b)
{
if(flag[y[j]+i-x[j]]!=i) m-=1;
flag[y[j]+i-x[j]]=i;
}
if(y[j]-i+x[j]>=1&&y[j]-i+x[j]<=b)
{
if(flag[y[j]-i+x[j]]!=i) m-=1;
flag[y[j]-i+x[j]]=i;
}
}
else
{
if(y[j]+(x[j]-i)>=1&&y[j]+(x[j]-i)<=b)
{
if(flag[y[j]+(x[j]-i)]!=i) m-=1;
flag[y[j]+(x[j]-i)]=i;
}
if(y[j]-(x[j]-i)>=1&&y[j]-(x[j]-i)<=b)
{
if(flag[y[j]-(x[j]-i)]!=i) m-=1;
flag[y[j]-(x[j]-i)]=i;
}
}
}
n+=m;
}
cout<<n;
return 0;
}