#1880. CSP-J 2023 一元二次方程(uqe)T3

CSP-J 2023 一元二次方程(uqe)T3

一元二次方程(uqe)

题目背景

众所周知,对一元二次方程:

ax² + bx + c = 0(a ≠ 0)

可以用下述方式求实数解。

计算判别式:

Δ = b² - 4ac

分两种情况:

  1. 若 Δ < 0,则该一元二次方程无实数解。

  2. 若 Δ ≥ 0,则该一元二次方程有两个实数解:

    x₁ = (-b + √Δ) / (2a)

    x₂ = (-b - √Δ) / (2a)

其中,√Δ 表示 Δ 的算术平方根,即满足 s² = Δ 的唯一非负实数 s。

特别地:

  • 当 Δ = 0 时,这两个实数解相等;
  • 当 Δ > 0 时,这两个实数解互异。

例如:

  • x² + x + 1 = 0 无实数解,因为 Δ = 1² - 4 × 1 × 1 = -3 < 0;
  • x² - 2x + 1 = 0 有两个相等的实数解,x₁ = x₂ = 1;
  • x² - 3x + 2 = 0 有两个互异的实数解,x₁ = 1,x₂ = 2。

在题面描述中,a 和 b 的最大公因数使用 gcd(a, b) 表示。例如,12 和 18 的最大公因数是 6,即 gcd(12, 18) = 6。

题目描述

现在给定一个一元二次方程的系数 a, b, c,其中 a, b, c 均为整数且 a ≠ 0。

你需要判断一元二次方程 ax² + bx + c = 0 是否有实数解,并按要求的格式输出。

有理数的输出规则

在本题中,输出有理数 v 时须遵循以下规则:

存在唯一的两个整数 p 和 q,满足:

  • q > 0;
  • gcd(p, q) = 1;
  • v = p / q。

输出格式如下:

  • 若 q = 1,则输出 {p};
  • 否则,输出 {p}/{q}。

其中,{n} 代表整数 n 的值。

例如:

  • 当 v = -0.5 时,p = -1,q = 2,应输出 -1/2;
  • 当 v = 0 时,p = 0,q = 1,应输出 0。

方程答案的输出规则

令 Δ = b² - 4ac。

情况一:Δ < 0

方程无实数解,输出:

NO

情况二:Δ ≥ 0

方程有两个实数解(可能相等),记其中较大者为 x。

若 x 为有理数,则按照上述有理数格式输出 x。

否则,x 可以被唯一表示为:

x = q₁ + q₂√r

其中:

  • q₁、q₂ 为有理数,且 q₂ > 0;
  • r 为正整数,且 r > 1;
  • 不存在正整数 d > 1,使得 d² 整除 r,即 r 不含大于 1 的平方因子。

此时,按照以下规则输出。

先输出有理数部分:

  • 若 q₁ ≠ 0,则按照有理数格式输出 q₁,并再输出一个加号 +;
  • 若 q₁ = 0,则跳过这一步。

随后输出根式部分:

条件 输出格式
q₂ = 1 sqrt({r})
q₂ 为整数,且 q₂ ≠ 1 {q2}*sqrt({r})
q₂ 不是整数,但 q₃ = 1 / q₂ 为整数 sqrt({r})/{q3}
其他情况,q₂ = c / d,且 c, d > 1、gcd(c, d) = 1 {c}*sqrt({r})/{d}

上述表示中的 {n} 代表对应整数的值,详见样例。

如果方程有实数解,输出两个实数解中的较大者;否则输出 NO。

输入格式

从文件 uqe.in 中读入数据。

输入的第一行包含两个正整数 T, M,分别表示方程数和系数绝对值的上界。

接下来 T 行,每行包含三个整数 a, b, c。

输出格式

输出到文件 uqe.out 中。

输出 T 行,每行包含一个字符串,表示对应询问的答案,格式如题面所述。

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

样例 1

输入

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

样例 2

见选手目录下的 uqe/uqe2.in 与 uqe/uqe2.ans。

数据范围

对于所有测试数据,保证:

  • 1 ≤ T ≤ 5000;
  • 1 ≤ M ≤ 1000;
  • |a|, |b|, |c| ≤ M;
  • a ≠ 0。
测试点编号 M ≤ 特殊性质 A 特殊性质 B 特殊性质 C
1 是
2 20 否 否 否
3 1000 是 是
4 否
5 否 是 是
6 否
7、8 否 是
9、10 否

特殊性质 A: 保证 b = 0。

特殊性质 B: 保证 c = 0。

特殊性质 C: 如果方程有实数解,那么方程的两个实数解都是整数。