#joi2014ho5. [joi2014ho5]切り取り線 (Cutting)
[joi2014ho5]切り取り線 (Cutting)
JOI君的纸艺作品
JOI君是一个爱好纸艺的人。今天,JOI君准备做一件纸艺作品。
首先,JOI君根据设计图,在一张长方形的纸上印刷了N条剪切线。每条剪切线都是与纸的竖直或水平边平行的线段。将纸切割后所得的所有部分都将用作作品的某个部件。显然,部件越多的作品制作起来越困难。JOI君想知道,在按照所有剪切线切割纸张后,纸张被分割成了多少部分。
任务
给定纸张的尺寸和N条剪切线的信息,请编写一个程序,计算纸张被切割成了多少部分。
输入
从标准输入读取以下数据:
- 第1行包含三个整数W、H、N(以空格分隔)。其中W表示纸张的横边长,H表示纸张的纵边长,N表示剪切线的数量。纸张的左下角、右下角、左上角和右上角分别用坐标、、和表示。
- 接下来的N行中,第i行()包含四个整数(以空格分隔)。表示第i条剪切线连接点和。该线段是纸张的一条边上的线段。换句话说,满足和的其中一个条件。 另外,任意两条不同的剪切线不存在公共点,也不存在某条剪切线与平行于其的其他剪切线或纸张边缘有公共点。
输出
请在标准输出中以一行输出纸张被分割成了多少部分的整数。
限制
所有输入数据满足以下条件:
子任务
子任务1 [5 分]
满足以下条件:
子任务2 [5 分]
满足以下条件:
子任务3 [20 分]
存在具有共享点的不同两条剪切线的数量不超过100,000。
子任务4 [20 分]
从剪切线上的任意一点到纸张的某条边上的点,可以沿着几条剪切线进行导航。
子任务5 [50 分]
无额外限制。
输入示例1
10 10 5
6 0 6 7
0 6 7 6
2 3 9 3
2 3 2 10
1 9 8 9
输出示例1
4
对于这个输入,剪切线如下图所示。
因此,纸张被切割为4个部分。值得注意的是,这个输入满足子任务4的条件。
输入示例2
13 7 28
1 1 4 1
1 1 1 3
2 2 3 2
2 2 2 3
1 3 2 3
3 2 3 6
4 1 4 6
3 6 4 6
5 1 8 1
5 1 5 6
6 2 7 2
6 2 6 5
7 2 7 5
6 5 7 5
8 1 8 6
5 6 8 6
9 1 12 1
9 1 9 2
9 2 10 2
12 1 12 2
11 2 12 2
10 2 10 5
9 5 10 5
9 5 9 6
11 2 11 5
11 5 12 5
12 5 12 6
9 6 12 6
输出示例2
5
对于这个输入,剪切线如下图所示。
因此,纸张被切割为5个部分。值得注意的是,这个输入不满足子任务4的条件。