#1763. [Baltic2009]subway

内存限制:64 MiB 时间限制:4 Sec

题目描述

Stockholm城市的地铁是由一些地铁网组成的。在这个题目当中我们会特殊考虑到一条线路,当出现“信号错误”时,问题就经常发生在这条线路。 一条地铁线路能被看做两条平行并且由结束点连接的轨道。在上层的轨道当中,火车将会从右往左行驶,下层轨道当中,火车将会从左往右行驶。当一辆火车到达了一条轨道的终点,它就改变轨道并且向相反的方向行驶。这个变轨是即刻的并且不需要时间, 在正常的交通当中,行驶的火车是持续不断的并且火车按照一个持续的速度行驶(火车通过1单位的长度所需时间为1)。火车被均匀地分配;也就是说,在轨道的任何一个位置,火车将会有周期性地通过。我们可以假设火车进站和乘客上下车的时间是可以忽略的。 现在,因为“信号错误”,火车已经随机地分配在线路上。作为交通经理,你的任务就是尽可能地保证火车重新被均匀地分配到线路上。现给出火车的位置,你需要编写一个程序,计算最少花费多少时间能达到目标。你能够命令火车在任何地方即时停止,或者改变方向。如果一辆火车改变了方向,它将会从自己原本的轨道移动到另一个轨道。 Figure 1:两条轨道长度均为100。在上面的例子当中,火车处于的位置为5,35,46,75和85。一个能使火车重新均匀地在轨道上行驶的方法就是,位置46的火车向左行驶1单位,然后改变方向。这样就花了一个单位时间。然而,这并不是最佳的方法;具体请看下面的样例1。

输入格式

第一行包含两个由空格分开的数字,轨道长度m和火车的数目n。 接下来的n行描述了火车的所有初始位置。每一行会被给出一个数字Xi和方向(L表示左,R表示右),它们由空格分开。

输出格式

你的程序需要输出使火车重新均匀地行驶所能够花费的最小时间。输出单独占一行。输出数据保证不大于10-6。

样例

样例输入


			
样例 1

Input
100 5
3 R
35 L
46 L
75 L
85 R

样例输出


			
0.5

数据范围与提示

100≤m≤100,000,000
1≤n≤100,000
0≤Xi≤m

数据分级

保证50%的数据当中,n≤200