#1880. CSP-J 2023 一元二次方程(uqe)T3
CSP-J 2023 一元二次方程(uqe)T3
一元二次方程(uqe)
题目背景
众所周知,对一元二次方程:
ax² + bx + c = 0(a ≠ 0)
可以用下述方式求实数解。
计算判别式:
Δ = b² - 4ac
分两种情况:
-
若 Δ < 0,则该一元二次方程无实数解。
-
若 Δ ≥ 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: 如果方程有实数解,那么方程的两个实数解都是整数。