超级蹦床
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
体育课上,ljr 抢走了 yzy 的本体(书包)并逃之夭夭。
为了不被 yzy 追上,ljr 提前准备好了逃跑路线,具体地,他的逃跑路线可以看成一条长度为 的线段,并且他在这条线段上布置了一堆蹦床,除此之外,ljr 打算在所有没有布置蹦床的地方给 yzy 设下陷阱,下面称这些没有布置蹦床的地方为目标。换言之,这条线段可以看成由 个整数点位置组成,在线段上,对于位置 到位置 的每个位置,不是目标就是蹦床。
直线上的位置由近到远依次编号为 1、2......、,
ljr 从某个整数位置 向远离 yzy 的方向弹跳,他最开始的弹跳力度为 1,
当 ljr 的弹跳力度为 ,他的下一次弹跳将在落在距离当前位置距离为 的地方。
每个目标和蹦床都有各自的参数,参数的取值范围是从 0 到 的整数值,
参数为 的蹦床可使 ljr 的弹跳力度增加 ,并反转 ljr 弹跳的方向,
对于参数为 的目标,如果 ljr 落到其上时弹跳力度至少达到 ,ljr 就会在这里设下陷阱来阻碍 yzy 的追击。
落在目标上不会改变 ljr 的弹跳力度或方向,
如果 ljr 落到一个已经设置陷阱的目标上,将不会有任何事情发生,ljr 仍在弹跳,也不会改变弹跳力度或方向,当然,陷阱也不会有任何变化。
如果 ljr 一直弹跳无限长的时间,或者直到他离开线段,他总共会设下多少个陷阱?
如果 ljr 从一个可以设置陷阱的目标开始弹跳,他立刻布置陷阱。
如果 ljr 从一个蹦床上开始弹跳,蹦床的效果会在他跳起来前生效。
输入格式
从文件 中读入数据,
第一行两个正整数, ,
接着 行,每行描述一个直线上的点,
第 行包含整数 和 ,分别表示这个位置是目标还是蹦床及这个位置的参数,
表示这个位置是蹦床, 表示这个位置是目标。
输出格式
输出数据到文件 ,
一行一个整数,表示 ljr 设置的陷阱数。
输入输出样例
5 2
0 1
1 1
1 2
0 1
1 1
1
6 4
0 3
1 1
1 2
1 1
0 1
1 1
3
数据范围和提示
样例解释
样例 1 解释
ljr 从位置 2 开始跳,位置 2 的目标参数为 1,因此 ljr 立即设置陷阱。然后他弹到位置 3,位置 3 的目标参数为 2,因此他在这里设置陷阱。他继续跳到位置 4,位置 4 是一个蹦床,这将转换他的方向,并将他的弹跳力度增加 1,现在他的弹跳力度是 2 。他弹回位置 2,位置 2 是一个已经被破坏的目标,所以他继续弹到位置 0 。位置 0 不在线段上,所以他停了下来。他只在位置 2 设置了一个陷阱。
样例 2 解释
ljr 的移动路径是:4→5→3→1→6→11
位置 11 不在线段上,所以 ljr 停了下来。
数据范围
对于 的数据,保证 ,
对于 的数据,保证 ,
对于 的数据,保证 ,使用 32 位整数数据类型即可解决本题。(如 C++14 中的 )