首页 > 其他分享 >P9750 [CSP-J 2023] 一元二次方程 题解

P9750 [CSP-J 2023] 一元二次方程 题解

时间:2024-10-22 21:21:14浏览次数:1  
标签:int 题解 d% 分母 一元二次方程 include CSP

大模拟

此题大模拟即可,只需注意几点:

  1. 分母$>0$.

  2. 要给根式化简.

  3. 分数要约分.

  4. 求较大根,那就 $b^2$ 加 $\bigtriangleup $ 即可.

分母 > 0

因为求根公式中,分母中只有 $a$ 一个未知数,所以我们只需保证 $a > 0$ 即可.

所以,当 $a < 0$ 时,我们把 $a,b,c$ 全部取相反值.但这也是有条件的,具体得看题目情况.

代码

#include<iostream>
#include<cstdio>
#include<cmath>

using namespace std;

int T, M, gt;

int gcd(int a, int b) {
	if (b == 0) return a;
	else return gcd(b, a % b);
}

int main() {
	scanf("%d%d", &T, &M);
	while (T--) {
		int a, b, c;
		scanf("%d%d%d", &a, &b, &c);
		if (a < 0) a = -a, b = -b, c = -c; // 预处理分母 > 0
		int d = b * b - 4 * a * c;
		if (d < 0) { // 无实数根
			printf("NO\n");
			continue;
		}
		int f = 1, i = 2;
        // f : 系数
        // 化简根式
		while (i * i <= d) {
			while (d % (i * i) == 0) {
				f *= i, d /= (i * i);
			}
			i++;
		}
		if (d == 0 || d == 1) { // 是有理数
			gt = abs(gcd(-b + f * d, 2 * a)); // 最大公因数
			printf("%d", (-b + f * d) / gt);
			if (2 * a / gt != 1) // 分母不是 1 的情况
				printf("/%d", 2 * a / gt);
			printf("\n");
		}
		else { // 无理数
			gt = abs(gcd(-b, 2 * a)); // 分开求
			if (-b / gt != 0) 
				printf("%d", -b / gt);
			if (2 * a / gt != 1) 
				printf("/%d", 2 * a / gt);
			if (-b / gt != 0)
				printf("+");
			gt = abs(gcd(f, 2 * a));
			if (f / gt != 1) printf("%d*", f / gt); // 系数不省略的情况
			printf("sqrt(%d)", d);
			if (2 * a / gt != 1) printf("/%d", 2 * a / gt);
			printf("\n");
		}
	}
	return 0;
}

标签:int,题解,d%,分母,一元二次方程,include,CSP
From: https://www.cnblogs.com/panda-lyl/p/18493781

相关文章

  • 题解:P10949 四叶草魔杖
    2024/10/16更新:修改了状态的枚举方式,时间复杂度变为\(O(3^n)\)。题目传送门前言本篇题解默认您已熟练掌握最小生成树、状压dp及其应用,如果您还不会,请先阅读相关博客。分析我们要选出一条边,通过边转移能量,使得所有宝石的能量都为\(0\)。这看上去挺麻烦的,让我们挖掘一......
  • 题解:AT_joisc2019_k 合併 (Mergers)
    题目传送门前言联考题,被初一的我切了。看到题解区里没有Tarjan做法,于是来补一篇Tarjan题解。分析因为相同州的城市不会分裂,所以可以给相同州的成市连边(注意不是两两连边,连成一个环就行),发现把国家分成两个部分就相当于断掉一条道路。那么如果整个国家就是一个边双连通分量,......
  • 题解:P11207 「Cfz Round 9」Rose
    可以考虑把字符串\(s\),\(t\)按\(s_1t_1s_2t_2\dotss_nt_n\)拼接,记为\(a\)。为了方便表述,这里分别把PVW表示为012。Subtask0我会暴力!可以直接在\(a\)上进行dfs,复杂度为\(O(3^{2n})\)。Subtask1我会找性质!注意到答案只有可能是\(0,1,2\),因为在最坏情况下,只......
  • 题解:P11204 「Cfz Round 9」Lone
    首先可以观察出把木棍平均分是最优的。然后平均分后最多只有两种长度的木棒,长度分别为\(\lfloor\frac{m}{n}\rfloor\)和\(\lfloor\frac{m}{n}\rfloor+1\)。最后check一下就行了。代码:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#define......
  • 近几年CSP-S考点分析与2024预测
    考点概率2020T1模拟、数学、二分一道很好的思维题,当年的T1比T2要难。T2贪心、位运算当年最简单的一道题,思维难度也不高。T3dp、topo要对题目进行转化,变成一个本质相同但难度不同的问题。T4队列、贪心类似于对于题意进行模拟。2021T1堆、贪心直接对整个进行贪心就......
  • P2934 [USACO09JAN] Safe Travel G 题解
    一个用平衡树,不用脑子的写法。(目前没有用平衡树的诶。)题意不经过最短路的最后一条边的最短路,保证最短路唯一。思路看到最短路唯一容易想到建出的最短路DAG其实是最短路树(以\(1\)为根)。那题意转化为求每个节点不经过与父亲的连边,所能到根节点的最短路。容易发现每个点的......
  • 【NOIP2021】方差 题解
    前言题目链接:洛谷;LOJ;UOJ。题意简述给你单调不降序列\(\{a_n\}\),你可以让\(a_i\getsa_{i-1}+a_{i+1}-a_i\),求操作后方差的最小值。\(n\leq10^4\),\(1\leqa_i\leq600\)。题目分析仔细观察操作,发现实际上是将\(a_i\)按照\(a_{i-1}\)和\(a_{i+1}\)的......
  • 题解:P10977 Cut the Sequence
    题目传送门分析看到这种题就可以想到动态规划,先设状态:$f_i$表示考虑前$i$个数,所需要的最小代价。发现$f_i$可以从所有$i$以前的状态加后一段区间转移过来,于是可以列出状态转移方程:$$f_i=\min_{j=i-1}^{s_i-s_j\leqm}(f_j+\max_{k=j+1}^i)$$其中$j$......
  • CSP-S 2020~2023 分析
    2020T1儒略日直接模拟即可,洛谷难度虚高。T2动物园考察对二进制数的理解程度,很简单,但需要特判答案超过longlong范围的情况。T3函数调用就是处理一下拓扑序就行了,代码细节较多,但整体比较简单。T4贪吃蛇很难想的贪心,考虑水分。发现$n\le3$的点很简单,轻松拿下$20......
  • [题解]P2671 [NOIP2015 普及组] 求和
    P2671[NOIP2015普及组]求和可以发现我们对相同颜色且编号奇偶性相同的元素归为一组,组内的元素两两都满足题目条件,且这样可以不重不漏覆盖所有答案。设分完组之后,某一组内的元素编号分别是\(a_1,a_2,\dots,a_q\),数字分别是\(b_1,b_2,\dots,b_q\),则根据题意,该组的答案是:\[\lar......