当前位置: 首页 > news >正文

5月22总结

P1024 [NOIP 2001 提高组] 一元三次方程求解

题目描述

有形如:$ a x^3 + b x^2 + c x + d = 0 $ 这样的一个一元三次方程。给出该方程中各项的系数($ a,b,c,d $ 均为实数),并约定该方程存在三个不同实根(根的范围在 $ -100 $ 至 $ 100 $ 之间),且根与根之差的绝对值 $ \ge 1 $。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后 $ 2 $ 位。

提示:记方程 $ f(x) = 0 $,若存在 $ 2 $ 个数 $ x_1 $ 和 $ x_2 $,且 $ x_1 < x_2 , , f(x_1) \times f(x_2) < 0 $,则在 $ (x_1, x_2) $ 之间一定有一个根。

输入格式

一行,$ 4 $ 个实数 $ a, b, c, d $。

输出格式

一行,$ 3 $ 个实根,从小到大输出,并精确到小数点后 $ 2 $ 位。

输入输出样例 #1

输入 #1

1 -5 -4 20

输出 #1

-2.00 2.00 5.00

说明/提示

【题目来源】

NOIP 2001 提高组第一题

题解:

就是特别要注意输入不是整数实数,所以用double,然后就是数学的零点存在定理,再运用二分法求出零点所在

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;	
double a, b, c, d;
double f(double x) {return a * x * x * x + b * x * x + c * x + d;
}
int main() {cin >> a >> b >> c >> d;for (double x = -100; x <= 100; x++) {double left = x, right = x + 1;if (f(left) * f(right) == 0) {if (f(left) == 0) {printf("%.2f ", left);}}else if (f(left) * f(right) < 0) {while (right - left >=0.001) {double mid = right + (left - right) / 2;if (f(left) * f(mid) < 0) {right = mid;}else {left = mid;}}printf("%.2f ", left);}else continue;}return 0;
}

P1182 数列分段 Section II

题目描述

对于给定的一个长度为 $ N $ 的正整数数列 $ A_{1\sim N} $,现要将其分成 $ M ( ( M\leq N $)段,并要求每段连续,且每段和的最大值最小。

关于最大值最小:

例如一数列 $ 4\ 2\ 4\ 5\ 1 $ 要分成 $ 3 $ 段。

将其如下分段:

$ [4\ 2][4\ 5][1] $

第一段和为 $ 6 $,第 $ 2 $ 段和为 $ 9 $,第 $ 3 $ 段和为 $ 1 $,和最大值为 $ 9 $。

将其如下分段:

$ [4][2\ 4][5\ 1] $

第一段和为 $ 4 $,第 $ 2 $ 段和为 $ 6 $,第 $ 3 $ 段和为 $ 6 $,和最大值为 $ 6 $。

并且无论如何分段,最大值不会小于 $ 6 $。

所以可以得到要将数列 $ 4\ 2\ 4\ 5\ 1 $ 要分成 $ 3 $ 段,每段和的最大值最小为 $ 6 $。

输入格式

第 $ 1 $ 行包含两个正整数 $ N,M $。

第 $ 2 $ 行包含 $ N $ 个空格隔开的非负整数 $ A_i $,含义如题目所述。

输出格式

一个正整数,即每段和最大值最小为多少。

输入输出样例 #1

输入 #1

5 3
4 2 4 5 1

输出 #1

6

说明/提示

对于 $ 20% $ 的数据,$ N\leq 10 $。

对于 $ 40% $ 的数据,$ N\leq 1000 $。

对于 $ 100% $ 的数据,$ 1\leq N\leq 10^5 , , M\leq N , , A_i < 10^8 $, 答案不超过 $ 10^9 $。

解题思路:就是输入的时候找到数组中最大值还有数组的和,然后进行一下二分,如果为数组最大值,遍历一遍,看是否刚刚能够构成最大值最小的组合

#include<bits/stdc++.h>
using namespace std;
int n, m, r, l,a[100001];
bool isTrue(int x) {int num = 0, total = 0;for (int i = 1; i <= n; i++) {if (total + a[i] <= x)total += a[i];else{total = a[i];num++;}}return num < m;
}
int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> a[i];l = max(l, a[i]);r += a[i];}while (l <= r) {int mid = (l + r) / 2;if (isTrue(mid))r = mid - 1;else l = mid+1;}cout << l;return 0;
}
http://www.xdnf.cn/news/595405.html

相关文章:

  • 浅聊一下搭建企业私有知识库的可行方案
  • Springboot3
  • mapbox V3 新特性,实现三维等高线炫酷效果
  • Linux(Ubuntu)新建文件权限继承问题
  • MQTT-主题(Topic)
  • DeepSeek:以开源之力,引领AI技术新风潮
  • MySQL初阶:JDBC
  • 海盗王客户端创建角色遮罩层修改成自适应窗口尺寸
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.10)
  • QT入门基础
  • python训练营打卡第31天
  • 【C++】控制台小游戏
  • 【人工智能】低代码基础技术讲解,规则引擎,在低代码平台上的作用,有哪些规则引
  • 前端请求状态出现CORS错误
  • CarPlay有线连接流程
  • 陕西安全员考试报名流程是怎样的?
  • 【Python3教程】Python3 文件(File)方法详解
  • 谷歌开源医疗领域多模态生成式AI模型:medgemma-4b-it
  • 完全禁用 Actuator 功能
  • 6个月Python学习计划 Day 1
  • Baklib企业知识中台AI实践
  • 2025年重庆水利水电安全员 A证考试精选题
  • Java设计模式
  • 爱博精电正式入驻京东平台,为客户提供更高效、便捷的采购体验
  • 结构型:装饰器模式
  • 项目开发中如何Git如何保持官方补丁更新
  • 工业物联网中隐私保护入侵检测的联邦学习增强型区块链框架
  • YOLOv11模型训练
  • Spring Ioc和Aop,Aop的原理和实现案例,JoinPoint,@Aspect,@Before,@AfterReturning
  • 如何使用小爱音响控制海尔等第三方平台设备