#713. 我不想解方程!!!

我不想解方程!!!

题目描述

给定一元二次方程

ax2+bx+c=0,ax^{2}+bx+c=0,

其中 a,b,ca,b,c 均为整数,且 a≠0a\ne 0。

令 Δ=b2−4ac\Delta=b^{2}-4ac,则:

  • 若 Δ<0\Delta<0,方程没有实数解。

  • 若 Δ≥0\Delta\ge 0,方程的两个实数解为

    x1,2=−b±Δ2a.x_{1,2}=\frac{-b\pm\sqrt{\Delta}}{2a}.

    当 Δ=0\Delta=0 时,两个实数解相等。

你需要判断给定方程是否有实数解。如果有,按照输出格式中的要求输出两个实数解中的较大者;否则输出 NO。

输入格式

第一行包含两个整数 T,MT,M(1≤T≤50001\le T\le 5000,1≤M≤1031\le M\le 10^{3}),分别表示方程的数量和系数的绝对值上限。

接下来 TT 行,每行包含三个整数 a,b,ca,b,c(1≤∣a∣≤M1\le |a|\le M,∣b∣≤M|b|\le M,∣c∣≤M|c|\le M),表示一个一元二次方程的系数。

输出格式

输出 TT 行,每行包含一个字符串,表示对应方程的答案。

若 Δ<0\Delta<0,输出 NO。否则,记两个实数解中的较大者为 xx,按照以下规则输出。

下文中的 {n} 表示整数 nn 的实际值,输出时不包含花括号。

1. 有理数的输出格式

本题中所有有理数均按照以下规则输出。

对于有理数 vv,将其写成唯一的最简分数

v=pq,v=\frac{p}{q},

其中 p,qp,q 为整数,q>0q>0,且 gcd⁡(∣p∣,q)=1\gcd(|p|,q)=1。

  • 若 q=1q=1,输出 {p}。

  • 否则,输出 {p}/{q}。

例如,−0.5-0.5 应输出为 -1/2,00 应输出为 0。

如果 xx 为有理数,直接按照上述格式输出 xx。

2. 无理数的输出格式

如果 xx 为无理数,则它可以唯一地表示为

x=q1+q2r,x=q_{1}+q_{2}\sqrt{r},

其中:

  • q1,q2q_{1},q_{2} 均为有理数,且 q2>0q_{2}>0。

  • rr 为大于 11 的整数,且不存在整数 d>1d>1 使得 d2∣rd^{2}\mid r。

首先处理有理部分:

  • 若 q1≠0q_{1}\ne 0,先按照有理数的输出格式输出 q1q_{1},再输出一个加号 +。

  • 若 q1=0q_{1}=0,省略有理部分和加号。

随后输出根式部分。

将 q2q_{2} 写成最简分数

q2=uv,q_{2}=\frac{u}{v},

其中 u,vu,v 为正整数,且 gcd⁡(u,v)=1\gcd(u,v)=1。按照以下四种情况输出:

  1. 若 u=1u=1 且 v=1v=1,输出 sqrt({r})。

  2. 若 u>1u>1 且 v=1v=1,输出 {u}*sqrt({r})。

  3. 若 u=1u=1 且 v>1v>1,输出 sqrt({r})/{v}。

  4. 若 u>1u>1 且 v>1v>1,输出 {u}*sqrt({r})/{v}。

每行输出的字符串中不得包含任何空格。

9 1000
1 -1 0
-1 -1 -1
1 -2 1
1 5 4
4 4 1
1 0 -432
1 -3 1
2 -4 1
1 7 1
1
NO
1
-1
-1/2
12*sqrt(3)
3/2+sqrt(5)/2
1+sqrt(2)/2
-7/2+3*sqrt(5)/2

样例解释

对于以下方程:

  • x2+x+1=0x^{2}+x+1=0 的判别式为 −3-3,没有实数解,应输出 NO。

  • x2−2x+1=0x^{2}-2x+1=0 的两个实数解均为 11,应输出 1。

  • x2−3x+2=0x^{2}-3x+2=0 的两个实数解分别为 11 和 22,应输出较大者 2。

以下是无理数的输出格式示例:

  • 2\sqrt{2} 应输出为 sqrt(2)。

  • 232\sqrt{3} 应输出为 2*sqrt(3)。

  • 52\frac{\sqrt{5}}{2} 应输出为 sqrt(5)/2。

  • 324\frac{3\sqrt{2}}{4} 应输出为 3*sqrt(2)/4。

  • −12+32-\frac{1}{2}+\frac{\sqrt{3}}{2} 应输出为 -1/2+sqrt(3)/2。