#P5392. Mowing the Field

Mowing the Field

题目描述

农民约翰在管理农场的各个方面都相当可靠,除了一点:他不善于及时割草。

事实上,他每天只能移动割草机一次。

在第1{1}天,他从位置x1{(x1,}y1{y1)}开始,在第d{d}天,他沿着直线段割草到位置xd{(xd,}yd{yd)} ,在农场的2D{2D}地图上水平或垂直移动;

也就是说xd=xd1{xd=xd-1 }或者 yd=yd1.FJ{yd=yd-1. FJ}连续几天在水平和垂直移动之间交替。

FJ{FJ}的进度如此缓慢,以至于在他完成所有割草之前,他割草的一些草可能会长回来。

在第d{d}天割草的任何部分都会在第d+T{d+T}天再次出现,因此,如果FJ{FJ}的割草路径与他至少提前T{T}天割草的路径相交,他将再次在同一点割草。

为了尝试改革他糟糕的割草策略,FJ{FJ}想统计一下这种情况发生的次数。

请计算FJ{FJ}的割草路径穿过草已经长回来的早期部分的次数。

您应该只计算"垂直"交叉点,即水平段和垂直段之间的公共点,这两个段都不是终点。

输入格式

第一行输入包含N(2{N(2≤}N{N≤}100,000){100,000)} 并且T(1{ T (1≤}T{T≤}N).{N).}

接下来的N{N}行描述了割草机在第1{1…}N{N}天的位置。

这些 行的第i{i}行包含整数xi{xi}yi{yi}(每个非负整数最多100000000{100000000})。

输出格式

请输出上述交叉点数量的计数,其中FJ{FJ}重新切割了先前切割后重新生长的草点。

样例

输入样例

7 4
0 10
10 10
10 5
3 5
3 12
6 12
6 3

输出样例

1

提示

在这里,FJ{FJ}在第7{7}天穿过他在第2{2}天割下的一段草,这很重要。

其他十字路口不计算在内。

注意:这个问题扩展了限制:每个测试用例5{5}秒(Python{Python}Java{Java}10{10}秒),内存512MB{512 MB}