CCF-CSP认证 202012-2 期末预测之最佳阈值

2024-06-19 16:38

本文主要是介绍CCF-CSP认证 202012-2 期末预测之最佳阈值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路写在注释里面了。《算法笔记》P147页,活用递推章节语:“很多题目需要细心考虑过程中是否存在可能的递推关系,如果能找到这样的递推关系,就能使时间复杂度下降不少。例如就一类涉及序列的题目来说,假如序列每一位所需要计算的值都可以通过该位左右两侧的计算结果得到,那么就可以考虑所谓的‘左右两侧的结果’是否能够通过递推进行预处理来得到,这样在后面的使用中就可以不必反复求解。”

PAT B1040/A1093也是这个思路。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
struct Student
{int y_{ 0 };int result_{ 0 };
};
bool cmp(const Student &lhs, const Student &rhs)
{if (lhs.y_ != rhs.y_) return lhs.y_ < rhs.y_;return lhs.result_ < rhs.result_;
}
struct ThreeElementArr {int y_{ 0 };int pass_lower_than_y_{ 0 };int fail_higher_than_y_{ 0 };
};
int main()
{
#ifdef LOCALfreopen("input.txt", "r", stdin);
#endifint m; cin >> m; vector<Student> student_set(m);for (int i = 0; i < m; ++i) {cin >> student_set[i].y_ >> student_set[i].result_;}// 根据y,m个人形成一个排序,把m个人划分成rank+1个类(相同的y在相同的类)(rank<m,从0开始)。// 维护一个大小为rank+1的数组,数组元素为三元组,// 三元组的构成为:{这个rank的y,这个rank之前有多少人过了,这个rank之后有多少人没过};// 从前向后扫描一次排好序的student_set获得第二个元,从后向前获得第三个元,时间复杂度O(2N).// 再扫描一遍这个数组,第二个元和第三个元加和结果最小的元素的y就是阈值y.sort(student_set.begin(), student_set.end(), cmp);vector<ThreeElementArr> rank_arr(m);// 第二个元,即小于此分数的人中有多少人没过。int pass_lower_than_y = 0;int rank = 0;for (int i = 0; i < m; ++i) {if (i == 0) {rank_arr[rank].y_ = student_set[i].y_;}else if (i != 0 && student_set[i].y_ != student_set[i - 1].y_) {++rank;rank_arr[rank].y_ = student_set[i].y_;rank_arr[rank].pass_lower_than_y_ = pass_lower_than_y;}if (student_set[i].result_ == 1) {++pass_lower_than_y;}}// 第三个元,也就是分数大于等于此分数的人中有多少人没有过。int rrank = rank;int fail_higher_tan_y = 0;for (int i = m - 1; i >= 0; i--) {if (i != m - 1 && student_set[i].y_ != student_set[i + 1].y_) {--rrank;}if (student_set[i].result_ == 0) {++fail_higher_tan_y;}rank_arr[rrank].fail_higher_than_y_ = fail_higher_tan_y;}// 寻找和最小的元素的yint min=999999999; int min_idx;for (int i = rank; i >= 0; --i) {if (rank_arr[i].fail_higher_than_y_ + rank_arr[i].pass_lower_than_y_ < min) {min = rank_arr[i].fail_higher_than_y_ + rank_arr[i].pass_lower_than_y_;min_idx = i;}}cout << rank_arr[min_idx].y_;
}

这篇关于CCF-CSP认证 202012-2 期末预测之最佳阈值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075571

相关文章

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

Java 中 Optional 的用法及最佳实践

《Java中Optional的用法及最佳实践》在Java开发中,空指针异常(NullPointerException)是开发者最常遇到的问题之一,本篇文章将详细讲解Optional的用法、常用方... 目录前言1. 什么是 Optional?主要特性:2. Optional 的基本用法2.1 创建 Opti

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理