![](https://img-blog.csdnimg.cn/direct/e78e2b22e23a4a108d5123afb4497c5e.png)
![](https://img-blog.csdnimg.cn/direct/2eed2ac8e3824b4aa3259ba3f37608b1.png)
![](https://img-blog.csdnimg.cn/direct/189f8d031c0d4c2690da858d5340274f.png)
HZOJ_244
#include
<iostream>
#include
<string>
#include
<algorithm>
#include
<vector>
using
namespace
std;
typedef
pair
<
int
,
int
>
PII
;
int
cmp(
PII
x
,
PII
y
) {
if
(
x
.first !=
y
.first)
return
x
.first <
y
.first;
else
return
x
.second <
y
.second;
}
int
func(
int
len
,
vector
<
PII
>
vec
,
int
C
) {
int
size =
vec
.size();
//扫描x轴
for
(
int
i = 0, j =
C
+ i - 1; j < size; i++, j =
C
+ i - 1) {
if
(
vec
[
j
]
.first -
vec
[
i
]
.first + 1 >
len
)
continue
;
//vec_y存储范围内的点的y值
vector
<
int
> vec_y(
C
);
for
(
int
a = i, b = 0; a <=
C
+ i - 1; a++, b++) vec_y
[
b
]
=
vec
[
a
]
.second;
while
(j + 1 < size &&
vec
[
j + 1
]
.first -
vec
[
i
]
.first + 1 <=
len
) {
j += 1;
vec_y.push_back(
vec
[
j
]
.second);
}
//扫描y轴
sort(vec_y.begin(), vec_y.end());
for
(
int
a = 0, b =
C
- 1 + a; b < vec_y.size(); a++, b =
C
- 1 + a) {
if
(vec_y
[
b
]
- vec_y
[
a
]
+ 1 >
len
)
continue
;
return
1;
}
}
return
0;
}
int
main() {
int
C, N;
cin
>>
C
>>
N;
vector
<
PII
> vec(N);
for
(
int
i = 0; i < N; i++) {
int
x, y;
cin
>>
x
>>
y;
vec
[
i
]
=
PII
(x, y);
}
sort(vec.begin(), vec.end(), cmp);
int
head = 1, tail = 10000, mid;
while
(head < tail) {
mid = (head + tail) >> 1;
if
(func(mid, vec, C) == 0) head = mid + 1;
else
tail = mid;
}
cout
<<
tail;
return
0;
}