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

相关文章

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依