大力出奇迹打法
题号:NC16568
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

     ACM团队的三名成员小A、小B、小C相约去台球。

    B是技术流,然而小C则是大力出奇迹流,他们为此争吵起来。

  

    B:大力出奇迹大大降低了球精准进袋的概率。

    C:我力气大,可以让球进行很多次的反弹,多次反弹,让球进袋的概率大大增加。

    A:额,你们都说得很有道理的样子。要我看,实践才是检验真理的唯一标准。

 

    于是小A决定作为裁判,让小A,B进行一场比赛。

    双方胶着,比赛激烈。目前台上只剩下最后一个黑球,轮到小C执杆。由于之前小B白球进袋,所以小C这一次可以把白球放置在任意位置。小C要用杆子击打白球,通过白球与黑球的碰撞带动黑球的运动,最后让黑球进洞。C只能以与桌面其中一条边呈45度的角度进行弹球。而且他力气大,如果小C的打击可以让黑球进袋,那么黑球在进洞之前将不会停止。

唯有这个球进了,小C才能证明自身的正确性,否则下一球必定被小B打进。请你帮助小C完成这一次打击。

 

    假设满足:

    1.对于桌球碰到桌面反弹,入射角等于反射角。

    2.由于小C力气大,打法特殊,如果白球碰到黑球时,将会弹出桌外。

    3.桌面为n*m的长方形,可以分为n*m个格子,格子为正方形,长宽的大小均为1个单位。白球,黑球位于其中一个格子的正中心,可认为球是一个质点,球的运动轨迹为若干条相连的线段,如果球到达长方形的四个端点,可认为球进袋。

输入描述:

第1行输入两个整数n,m,代表长方形从左到右分为n部分,从下到上分为m部分(1<=n,m<=100000且n>=m)

第2行输入一个整数q,代表询问次数。(1<=q<=100)

接下的q行输入两个整数x,y,代表黑球所在格子是从左到右第x个格子,从下到上第y个格子。(2<=x<=n-1,2<=y<=m-1)

输出描述:

对于每一个询问,如果放置白球在任何位置,都不能使黑球进洞,输出-1;否则输出黑球进洞的最短运动距离(见假设),取,结果保留三位有效小数输出(如结果为1.1100,则输出1.110;结果为1.11,则输出1.110)。

示例1

输入

复制
5 5
2
4 2
3 2

输出

复制
2.121
-1

说明

对于第一个询问,方法1比方法2好。方法3和方法4无解。


球从(3.5,1.5)到(5,0),长度为2.121。

   
  

对于第二个询问,无解。
  
  
示例2

输入

复制
9 5
1
2 3

输出

复制
10.605

说明

   

方法1和方法2长度相同。



方法3和方法4长度相同,但比方法1和方法2的长度长很多。