ccf-csp 期末预测之最佳阈值

2023-05-16

期末预测之最佳阈值

在一开始使用了双重循环的做法,没有考虑时间复杂度的问题,最终虽然结果正确了,但是提交后显示运行时间超时,看来复杂度为n2并不满足题目的要求。
之后便开始想办法降低复杂度,一开始是想对本来的代码进行改进,但是最终没有成功,不过学会了一个c++中sort函数的新用法,可以定义一个cmp函数来作为sort比较的方法,

bool cmp(pair<int,bool>a,pair<int,bool>b)
{
    return a.first < b.first;
}//根据pair中的第一个值进行升序排序 

如上,这样就可以在vector数组的元素为pair时,根据first或者second来进行排序了。

之后再网上学习了本题的其他解法,依然是首先根据阈值来进行排序,之后的做法比较聪明,就是建立两个数组,分别存贮对应下标的pair阈值数组的前缀为0的个数和后缀为1的个数,相加即可代表预测正确的总个数,最后再通过下标计算、比较每个阈值的正确个数。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>

using namespace std;


bool cmp(pair<int,bool>a,pair<int,bool>b)
{
    return a.first < b.first;
}//根据pair中的第一个值进行升序排序 


int main(int argc, char** argv) {
	int m,k = -1,ma = 0;
	cin >> m;
	vector<pair<int,bool> > pii(m+1);
	pii[0] = pair<int,int>(-1,-1);
	vector<int> pre0(m+1,0);
	vector<int> rear1(m+1,0);
	int te = 0;
	bool res = 0;
	for(int i = 0;i<m;++i){
		cin>>pii[i].first>>pii[i].second;
	}
	sort(pii.begin()++,pii.end(),cmp);
	for(int i = 1;i <= m;++i)            //记录前缀0个数
        if(pii[i].second == 0)
            pre0[i] = pre0[i - 1] + 1;
        else
            pre0[i] = pre0[i - 1];
    for(int i = m;i >= 1;--i)           //记录后缀1个数
        if(pii[i].second == 1)
            rear1[i] = rear1[i + 1] + 1;
        else
            rear1[i] = rear1[i + 1];
    for(int i = 1;i <= m;++i){          //最终处理
        if(pii[i].first == pii[i - 1].first)
            continue;                   //如果有阈值相同的情况,那么在相同区间的第一个位置统计了,直接跳过
        if(ma <= pre0[i - 1] + rear1[i])//更新k和ma
            ma = pre0[i - 1] + rear1[i],k = pii[i].first;
    }
    cout<<k;
    return 0;

}

本部分代码大量cv自此博客:https://blog.csdn.net/qq_45985728/article/details/114903481,感谢大佬的分享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ccf-csp 期末预测之最佳阈值 的相关文章

随机推荐

  • 数字的逆序输出

    include lt stdio h gt int main 将一个数字逆序输出 printf 34 请输入一个数字 xff1a n 34 int number scanf 34 d 34 amp number printf 34 逆转后的
  • ENSP教程---OSPF单区域配置实验

    目录 一 实验目标 二 拓扑图 三 配置基本环境 四 配置OSPF 五 修改 OSPF hello dead时间参数 七 控制OSPF xff24 R BDR的选举 八 配置信息 一 实验目标 掌握OSPF 中Router ID 的配置方法
  • Java判断回文序列

    经典的回文序列判断问题 xff0c 博主在学数据结构时遇到的一道作业题 xff0c 当时老师让用栈做的 xff0c 将我自己写的程序分享一下 xff1a 题目 xff1a 编写一个程序判别读入的字符序列是否为 回文序列 xff0c 所谓回文
  • 定义一个数组,然后从键盘输入10个整数,编程求出其最大值、最小值以及平均值(C语言)

    本程序使用了定义冒泡排序函数和定义求平均函数的方法 include lt stdio h gt include lt math h gt void Bubblesort int a int len int i j temp for j 61
  • 「Atcoder」abc242 题解

    A T shirt Code span class token keyword void span span class token function solve span span class token punctuation span
  • websocket的reconnecting-websocket的使用

    1 引用 reconnecting websocket js npm i reconnecting span class token operator span websocket 2 建立websocket ts span class t
  • nextcloud+nginx+ssl+非443,踩坑记录

    需求描述 pc 移动端app必须都支持 为了省阿里云服务器流量 xff0c 服务器需要的三个访问路径 1 需要内网可以通过ip 43 port直接访问 2 外网可以通过ddns访问 xff0c 因为443和80端口都被封 xff0c 只能换
  • 【python学习笔记】

    一 基础知识 1 字面量 xff1a 被写下来的固定的值 2 单行注释符 xff1a 单行注释内容 ps xff1a 注释符后要有个空格 3 多行注释 xff1a 34 34 34 多行注释内容 34 34 34 4 查看变量和字面量类型
  • linux命令(包含基础命令和进阶命令)大全

    拷贝 xff1a yy 删除 xff1a dd 末行 xff1a G 首行 xff1a gg 设置行号 xff1a set u 撤销 xff1a u 定位某行 xff1a 行号 shift 43 g 关机 xff1a shutdown ha
  • 汇编语言学习笔记

    一 绪论 所用教材 xff1a 汇编语言第3版 王爽老师 xff0c 清华大学出版社 1 从机器语言到汇编语言 机器语言是机器指令的集合 xff0c 汇编指令是机器指令的助记符 xff0c 汇编指令通过编译器转换成机器可以识别的01机器码
  • 机器学习笔记

    一 绪论 1 监督学习 给定一个数据集 xff0c 且已经表明了 正确答案 1 1回归问题 xff1a 预测一个连续值输出 xff1b 分类问题 xff1a 预测一个离散值输出 2 无监督学习 给定一个未表明意义的数据集 xff0c 将其分
  • C++之 try语句块和异常处理

    一 异常 异常是指存在于代码运行时的反常行为 xff0c 这些反常行为超出了函数正常执行功能的范围 xff0c 异常处理机制包括两部分的协同支持 xff1a 异常检测和异常处理 二 C 43 43 中的异常处理 在c 43 43 语言中 x
  • leetcode166题-分数到小数

    题目来源 xff1a leetcode cn 问题描述 xff1a 给定两个整数 xff0c 分别表示分数的分子 numerator 和分母 denominator xff0c 以 字符串形式返回小数 如果小数部分为循环小数 xff0c 则
  • set_new_handler(0)

    STL源码剖析 第45页中有一行代码set new handler 0 xff09 xff1a inline T allocate ptrdiff t size T std set new handler 0 T tmp 61 T oper
  • win11电脑中文用户名修改成英文用户名

    电脑的用户名是中文 xff0c 在某些软件中会产生乱码问题 xff0c 甚至无法使用的问题 xff0c 比如rabbitmq就会无法使用 这个问题可真是头疼啊 下面我就来介绍一下 xff0c win11怎么修改用户名 首先需要退出当前用户
  • 【计蒜客普及T1】T1068 救援-Java

    文章目录 一 问题描述二 格式要求1 输入格式2 输出格式 三 思路分析四 代码实例 一 问题描述 救生船从大本营出发 xff0c 营救若干屋顶上的人回到大本营 xff0c 屋顶数目以及每个屋顶的坐标和人数都将由输入决定 xff0c 求出所
  • 【Windows优化系列】Windows11安装Android子系统

    前言 Q xff1a 为什么要在Windows安装Android系统 xff1f 直接在手机使用不好吗 xff1f A xff1a 在电脑刷酷安不比拿着手机刷酷安爽吗 xff1f 在电脑版的酷安码字不比手机上码字爽吗 xff1f 不用打开手
  • 解决toolbar标题不显示问题

    问题原因 xff1a toolbar的兼容性有问题 解决办法 xff1a setSupportActionBar toolbar toolbar使用步骤 xff1a 1 编写menu xml 为了保持兼容需要这样写 xff1a androi
  • vue3.0框架Element Plus

    Element Plus 前言一 安装二 使用步骤1 完整引入2 按需导入ViteWebpack 前言 由于 Vue 3 不再支持 IE11 xff0c Element Plus 也不再支持 IE 浏览器 一 安装 span class t
  • ccf-csp 期末预测之最佳阈值

    期末预测之最佳阈值 在一开始使用了双重循环的做法 xff0c 没有考虑时间复杂度的问题 xff0c 最终虽然结果正确了 xff0c 但是提交后显示运行时间超时 xff0c 看来复杂度为n2并不满足题目的要求 之后便开始想办法降低复杂度 xf