using
System;
using
System.Collections.Generic;
class
GFG{
static
bool
isSafe(
int
x,
int
y,
int
h,
int
w,
int
p)
{
if
(x >= 1 && x <= h)
{
if
(y >= 1 && y <= w)
{
if
(x + p - 1 <= h)
{
if
(y + p - 1 <= w)
{
return
true
;
}
}
}
}
return
false
;
}
static
void
CountSquares(
int
h,
int
w,
int
n,
int
K,
int
p, List<Tuple<
int
,
int
>> painted)
{
Dictionary<Tuple<
int
,
int
>,
int
> mp =
new
Dictionary<Tuple<
int
,
int
>,
int
>();
for
(
int
i = 0; i < painted.Count; ++i)
{
int
x = painted[i].Item1;
int
y = painted[i].Item2;
for
(
int
j = x - p + 1; j <= x; ++j)
{
for
(
int
k = y - p + 1; k <= y; ++k)
{
if
(isSafe(j, k, h, w, p))
{
Tuple<
int
,
int
> temp =
new
Tuple<
int
,
int
>(j, k);
if
(mp.ContainsKey(temp))
{
if
(mp[temp] >= p * p)
continue
;
else
mp[temp]++;
}
else
{
mp[temp] = 1;
}
}
}
}
}
int
[] ans =
new
int
[p * p + 1];
foreach
(KeyValuePair<Tuple<
int
,
int
>,
int
> x
in
mp)
{
int
cnt = x.Value;
ans[cnt]++;
}
int
sum = 0;
for
(
int
i = 1; i <= p * p; ++i)
sum = sum + ans[i];
int
total = (h - p + 1) * (w - p + 1);
ans[0] = total - sum;
Console.WriteLine(ans[K]);
return
;
}
static
void
Main()
{
int
H = 4, W = 5, N = 8, K = 4, P = 3;
List<Tuple<
int
,
int
>> painted =
new
List<Tuple<
int
,
int
>>();
painted.Add(
new
Tuple<
int
,
int
>(3, 1));
painted.Add(
new
Tuple<
int
,
int
>(3, 2));
painted.Add(
new
Tuple<
int
,
int
>(3, 4));
painted.Add(
new
Tuple<
int
,
int
>(4, 4));
painted.Add(
new
Tuple<
int
,
int
>(1, 5));
painted.Add(
new
Tuple<
int
,
int
>(2, 3));
painted.Add(
new
Tuple<
int
,
int
>(1, 1));
painted.Add(
new
Tuple<
int
,
int
>(1, 4));
CountSquares(H, W, N, K, P, painted);
}
}