CSP-J 2023 T3 一元二次方程 解题报告
CSP-J 2023 T3 一元二次方程 解题报告
Link
前言
今年 C S P CSP CSP的原题, 回家 1 h 1h 1h内写 A C AC AC, 但是考场上没有写出来 , 原因是脑子太不好了, 竟然调了两个小时没有调出来. 一等奖悬那…
正题
看完题目,第一眼就是大模拟, 并且 C C F CCF CCF绝对不会让你好受,所以出了一个如此刁钻的题目, 并且要考虑到非常多的情况, 代码非常长…
最重要的一点: Δ \Delta Δ
Δ \Delta Δ是此题中最重要的分情况讨论的地方. 根据初三 22 22 22章的所学知识 ,可知分三种情况:
1. Δ < 0 \Delta < 0 Δ<0
不用说了
直接输出NO
2. Δ = 0 \Delta = 0 Δ=0
同样的, 只有一种情况, 答案为 − b 2 a - \dfrac{b}{2a} −2ab,但是, 需要严谨的判断.
if(delta == 0) {if(b == 0) {cout << 0;}else if(a * b > 0) {a = abs(a);b = abs(b);cout << "-";if(b % (2 * a) == 0) {cout << b / 2 / a;}else {cout << b / __gcd(2 * a, b) << "/" << (2 * a) / __gcd(2 * a, b);}}else {a = abs(a);b = abs(b);if(b % (2 * a) == 0) {cout << b / 2 / a;}else {cout << b / __gcd(2 * a, b) << "/" << (2 * a) / __gcd(2 * a, b);}}
}
3. Δ > 0 \Delta > 0 Δ>0
地狱.
我是分两种情况的, 一种是 a > 0 a > 0 a>0, 一种是 a < 0 a < 0 a<0. 这样可以分辨出是 + Δ + \sqrt{\Delta } +Δ 还是 − Δ -\sqrt{\Delta } −Δ
如若 a < 0 a < 0 a<0, 则可知答案为:
b + Δ − 2 a \dfrac{b + \sqrt{\Delta}}{-2a} −2ab+Δ
如若 a > 0 a > 0 a>0, 则可知答案为:
Δ − b 2 a \dfrac{\sqrt{\Delta} - b}{2a} 2aΔ−b
- 在这里有一个技巧, 就是不论怎样, 输出时, Δ \sqrt{\Delta} Δ永远是正的(符号为
+
)
可以分两种情况:
1.第一种: 不需要写sqrt
, 也就是 Δ \Delta Δ为完全平方数时,
比较好处理, 首先需要判断 b + Δ b + \sqrt{\Delta} b+Δ是否为 0 0 0. 如果是, 则直接输出 0 0 0; 否则输出最简分数.
其中, 一定要记住如果 ( b + Δ ) % ( 2 ∗ a ) = 0 (b + \sqrt{\Delta}) \% (2 * a) = 0 (b+Δ)%(2∗a)=0, 就直接输出一个整数.还要注意判断正负号.
2.第二种: 需要写sqrt
, 很难.
首先, 先输出前面的内容, 也就是 − b 2 a -\dfrac{b}{2a} −2ab, 判断同上.
然后, 输出+
, 代表符号.
接着, 找出三个变量, 也就是: x y Δ x 2 \dfrac{x}{y} \sqrt{\dfrac{\Delta}{x^2}} yxx2Δ中的 x , y 和 Δ x 2 x, y和\dfrac{\Delta}{x^2} x,y和x2Δ.其中, Δ x 2 \sqrt{\dfrac{\Delta}{x^2}} x2Δ为最简平方根数.
接下来是 4 4 4种情况:
x = y x = y x=y, 只有 Δ x 2 \sqrt{\dfrac{\Delta}{x^2}} x2Δ;
x % y = 0 x \% y = 0 x%y=0, 只有 x y Δ x 2 \dfrac{x}{y}\sqrt{\dfrac{\Delta}{x^2}} yxx2Δ
y % x = 0 y \% x = 0 y%x=0, 只有 Δ x 2 y \dfrac{\sqrt{\dfrac{\Delta}{x^2}}}{y} yx2Δ
其他情况, 输出 x × Δ x 2 y \dfrac{x \times \sqrt{\dfrac{\Delta}{x^2}}}{y} yx×x2Δ
完结撒花!!
C o d e : Code: Code:
- 心脏病患者请勿观看
#include <bits/stdc++.h>
using namespace std;int T, M;
int a, b, c;int pd(int x) {for(int i = sqrt(x) + 1; i >= 1; --i) {if(x % (i * i) == 0) {return i;}}
}int main() {cin >> T >> M;while(T--) {cin >> a >> b >> c;int delta;delta = b * b - 4 * a * c;if(delta < 0) {cout << "NO";}else if(delta == 0) {if(b == 0) {cout << 0;}else if(a * b > 0) {a = abs(a);b = abs(b);cout << "-";if(b % (2 * a) == 0) {cout << b / 2 / a;}else {cout << b / __gcd(2 * a, b) << "/" << (2 * a) / __gcd(2 * a, b);}}else {a = abs(a);b = abs(b);if(b % (2 * a) == 0) {cout << b / 2 / a;}else {cout << b / __gcd(2 * a, b) << "/" << (2 * a) / __gcd(2 * a, b);}}}else {if(a < 0) {int mother = - 2 * a;int x = pd(delta);int y = delta / x / x;if(b == 0) {mother = abs(mother);if(y == 1) {if(x == mother) {cout << "1";}else if(x % mother == 0) {cout << x / mother;}else {cout << x / __gcd(x, mother) << "/" << mother / __gcd(x, mother);}}else {if(x == mother) {cout << "sqrt(" << y << ")";}else if(mother % x == 0) {cout << "sqrt(" << y << ")";cout << "/" << mother / x;}else if(x % mother == 0) {cout << x / mother << "*sqrt(" << y << ")";}else {cout << x / __gcd(x, mother) << "*sqrt(" << y << ")" << "/" << mother / __gcd(x, mother);}}}else if(y == 1) { // 不需要sqrt// 说明可以合并为同一个式子int son = - b - x;if(son == 0) {cout << 0;}else if(son * mother < 0) { // 如果分子分母同号.son = abs(son);mother = abs(mother);if(son % mother == 0) {cout << son / mother;}else {cout << son / __gcd(son, mother) << "/" << mother / __gcd(son, mother);}}else { // 如果分子分母异号.son = abs(son);mother = abs(mother);cout << "-";if(son % mother == 0) {cout << son / mother;}else {cout << son / __gcd(son, mother) << "/" << mother / __gcd(son, mother);}}}else { // 需要sqrt.// 1. 先输出前面的if(b > 0) { // 不需要负号b = abs(b);mother = abs(mother);if(b % mother == 0) {cout << b / mother;}else {cout << b / __gcd(b, mother) << "/" << mother / __gcd(b, mother);}}else { // 需要负号b = abs(b);mother = abs(mother);cout << "-";if(b % mother == 0) {cout << b / mother;}else {cout << b / __gcd(b, mother) << "/" << mother / __gcd(b, mother);}}// 2. 输出sqrt部分(不管怎样都是+)cout << "+";if(x == 1) { // 不需要输出前缀.cout << "sqrt(" << y << ")";cout << "/" << - 2 * a;}else {if(x == mother) {cout << "sqrt(" << y << ")";}else if(x % mother == 0) {cout << x / mother << "*sqrt(" << y << ")";}else if(mother % x == 0) {cout << "sqrt(" << y << ")";cout << "/" << mother / x;}else {cout << x / __gcd(x, mother);cout << "*sqrt(" << y << ")";cout << "/" << mother / __gcd(x, mother);}}}}else {int mother = 2 * a;int x = pd(delta);int y = delta / x / x;if(b == 0) {mother = abs(mother);if(y == 1) {if(x == mother) {cout << "1";}else if(x % mother == 0) {cout << x / mother;}else {cout << x / __gcd(x, mother) << "/" << mother / __gcd(x, mother);}}else {if(x == mother) {cout << "sqrt(" << y << ")";}else if(mother % x == 0) {cout << "sqrt(" << y << ")";cout << "/" << mother / x;}else if(x % mother == 0) {cout << x / mother << "*sqrt(" << y << ")";}else {cout << x / __gcd(x, mother) << "*sqrt(" << y << ")" << "/" << mother / __gcd(x, mother);}}}else if(y == 1) { // 不需要sqrt// 说明可以合并为同一个式子int son = - b + x;if(son == 0) {cout << 0;}else if(son * mother > 0) { // 如果分子分母同号.son = abs(son);mother = abs(mother);if(son % mother == 0) {cout << son / mother;}else {cout << son / __gcd(son, mother) << "/" << mother / __gcd(son, mother);}}else { // 如果分子分母异号.son = abs(son);mother = abs(mother);cout << "-";if(son % mother == 0) {cout << son / mother;}else {cout << son / __gcd(son, mother) << "/" << mother / __gcd(son, mother);}}}else { // 需要sqrt.// 1. 先输出前面的if(b * mother < 0) { // 不需要负号b = abs(b);mother = abs(mother);if(b % mother == 0) {cout << b / mother;}else {cout << b / __gcd(b, mother) << "/" << mother / __gcd(b, mother);}}else { // 需要负号b = abs(b);mother = abs(mother);cout << "-";if(b % mother == 0) {cout << b / mother;}else {cout << b / __gcd(b, mother) << "/" << mother / __gcd(b, mother);}}// 2. 输出sqrt部分(不管怎样都是+)cout << "+";if(x == 1) { // 不需要输出前缀.cout << "sqrt(" << y << ")";cout << "/" << 2 * a;}else {mother = 2 * a;if(x == mother) {cout << "sqrt(" << y << ")";}else if(x % mother == 0) {cout << x / mother << "*sqrt(" << y << ")";}else if(mother % x == 0) {cout << "sqrt(" << y << ")";cout << "/" << mother / x;}else {cout << x / __gcd(x, mother);cout << "*sqrt(" << y << ")";cout << "/" << mother / __gcd(x, mother);}}}}}cout << endl;}return 0;
}
相关文章:
CSP-J 2023 T3 一元二次方程 解题报告
CSP-J 2023 T3 一元二次方程 解题报告 Link 前言 今年 C S P CSP CSP的原题, 回家 1 h 1h 1h内写 A C AC AC, 但是考场上没有写出来 , 原因是脑子太不好了, 竟然调了两个小时没有调出来. 一等奖悬那… 正题 看完题目,第一眼就是大模拟, 并且 C C F CCF CCF绝对不会让你好受…...

中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料
方案总体介绍 整套方案硬件部分共2块板子,包括MCU主板,采用SH79F6441-32作为主处理器。MCU主板包括2个版本。PCM动力电池保护板采用SH367309。 软件方案采用Keil51建立的工程,带蓝牙的版本,支持5~16S电池。 硬件方案--MCU主板 MC…...

Android数据对象序列化原理与应用
序列化与反序列化 序列化是将对象转换为可以存储或传输的格式的过程。在计算机科学中,对象通常是指内存中的数据结构,如数组、列表、字典等。通过序列化,可以将这些对象转换为字节流或文本格式,以便在不同的系统之间进行传输或存…...
Linux cp命令:复制文件和目录
cp 命令,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能。 cp 命令的基本格式如下: [rootlocalhost ~]# cp [选项] 源文件 目标文件 选项: -a&…...
SpringBoot 接收不到 post 请求数据与接收 post 请求数据
文章归档:https://www.yuque.com/u27599042/coding_star/xwrknb7qyhqgdt10 SpringBoot 接收不到 post 请求数据 接收 post 请求数据,控制器方法参数需要使用 RequestParam 注解修饰 public BaseResponseResult<Object> getMailCode(RequestParam…...

vue3学习(十四)--- vue3中css新特性
文章目录 样式穿透:deep()scoped的原理 插槽选择器:slotted()全局选择器:global()动态绑定CSScss module 样式穿透:deep() 主要是用于修改很多vue常用的组件库(element, vant, AntDesigin),虽然配好了样式但是还是需要更改其他的样式就需要用…...

Python爬虫基础之Requests详解
目录 1. 简介2. 安装3. 发送请求4. 处理响应5. IP代理6. Cookie登录参考文献 原文地址:https://program-park.top/2023/10/27/reptile_4/ 本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由…...
C++求根节点到叶子节点数字之和
文章目录 题目链接题目描述解题思路代码复杂度分析 题目链接 LCR 049. 求根节点到叶节点数字之和 - 力扣(LeetCode) 题目描述 给定一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表…...

C++搜索二叉树
本章主要是二叉树的进阶部分,学习搜索二叉树可以更好理解后面的map和set的特性。 1.二叉搜索树概念 二叉搜索树的递归定义为:非空左子树所有元素都小于根节点的值,非空右子树所有元素都大于根节点的值,而左右子树也是二叉搜索树…...

软件工程17-18期末试卷
2.敏捷开发提倡一个迭代80%以上的时间都在编程,几乎没有设计阶段。敏捷方法可以说是一种无计划性和纪律性的方法。错 敏捷开发是一种软件开发方法论,它强调快速响应变化、持续交付有价值的软件、紧密合作和适应性。虽然敏捷方法鼓励迭代开发和灵活性&…...

课题学习(九)----阅读《导向钻井工具姿态动态测量的自适应滤波方法》论文笔记
一、 引言 引言直接从原论文复制,大概看一下论文的关键点: 垂直导向钻井工具在近钻头振动和工具旋转的钻井工作状态下,工具姿态参数的动态测量精度不高。为此,通过理论分析和数值仿真,提出了转速补偿的算法以消除工具旋…...

阿里云服务器—ECS快速入门
这里对标阿里云的课程,一步步学习,链接在下面,学习完考试及格即可获取阿里云开发认证和领取证书,大家可以看看这个,这里我当作笔记,记一下提升印象! 内容很长,请耐心看完࿰…...
Hive简介及核心概念
本专栏案例数据集链接: https://download.csdn.net/download/shangjg03/88478038 1.简介 Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 SQL 查询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业,然后提交到 Hadoop 上运行。 …...

CrossOver 23.6.0 虚拟机新功能介绍
CrossOver 23.6.0 Mac 此应用程序允许您运行为 Microsoft Windows 编写的程序,而无需实际安装操作系统。 CrossOver 23.6.0 Mac 包括一个 Windows 程序库,用于它可以运行的 Windows 程序。 您会发现非常流行的应用程序,例如 Microsoft Word…...

(免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设农产品销售管理系统。…...
centos更改yum源
1、更改yum源 阿里云/etc/yum.repos.d/CentOS-Base.repo 金山云/etc/yum.repos.d/cloud.repo vi /etc/yum.repos.d/cloud.repo 替换为 [base] nameCentOS-$releasever - Base mirrorlisthttp://mirrorlist.centos.org/?release$releasever&arch$basearch&repoos&…...

React-快速搭建开发环境
1.安装 说明:react-excise-01是创建的文件名 npx create-react-app react-excise-01 2. 打开文件 说明:we suggest that you begin by typing:下面即是步骤。 cd react-excise-01 npm start 3.显示...
算法随想录算法训练营第四十六天| 583. 两个字符串的删除操作 72. 编辑距离
583. 两个字符串的删除操作 题目:给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 思路:这题思路主要是求出 word1 字符串和 word2 字符串中的最长相同的子字符串&…...

vue源码分析(五)——vue render 函数的使用
文章目录 前言一、render函数1、render函数是什么? 二、render 源码分析1.执行initRender方法2.vm._c 和 vm.$createElement 调用 createElement 方法详解(1)区别(2)代码 3、原型上的_render方法(1…...

Maven第三章:IDEA集成与常见问题
Maven第三章:IDEA集成与常见问题 前言 本章内容重点:了解如何将Maven集成到IDE(如IntelliJ IDEA或Eclipse)中,以及使用过程中遇到的常见的问题、如何解决,如何避免等,可以大大提高开发效率。 IEAD导入Maven项目 File ->Open 选择上一章创建的Maven项目 my-app查看po…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...