CCF认证期末预测之最佳阈值

2023-05-16

期末预测之最佳阈值

题目描述

具体来说,顿顿评估了 m m m位同学上学期的安全指数,其中第 i ( 1 ≤ i ≤ m ) i(1\le i\le m) i(1im)位同学的安全指数为 y i y_i yi,是一个 [ 0 , 1 0 8 ] [0,10^8] [0,108]范围内的整数;同时,该同学上学期的挂科情况记作 r e s u l t i ∈ { 0 , 1 } result_i\in \{0,1\} resulti{0,1},其中 0 0 0表示挂科、 1 1 1表示未挂科。

相应地,顿顿用 p r e d i c t θ ( y ) predict_{\theta}(y) predictθ(y)表示根据阈值 θ \theta θ将安全指数 y y y转化为的具体预测结果。 如果 p r e d i c t θ ( y j ) predict_{\theta}(y_j) predictθ(yj) r e s u l t j result_j resultj相同,则说明阈值为 θ \theta θ时顿顿对第 j j j位同学是否挂科预测正确;不同则说明预测错误。

p r e d i c t θ ( y ) = { 0 ( y < θ ) 1 ( y ≥ θ ) predict_{\theta}(y)=\begin{cases}0&(y\lt \theta)\\1&(y\ge \theta)\end{cases} predictθ(y)={01(y<θ)(yθ)
最后,顿顿设计了如下公式来计算最佳阈值 θ ∗ \theta^* θ
θ ∗ = max ⁡ arg max ⁡ θ ∈ y i ∑ j = 1 m ( p r e d i c t θ ( y j ) = = r e s u l t j ) \theta^*=\max \argmax\limits_{\theta\in y_i}\sum\limits_{j=1}^{m}(predict_{\theta}(y_j)==result_j) θ=maxθyiargmaxj=1m(predictθ(yj)==resultj)

该公式亦可等价地表述为如下规则:

最佳阈值仅在 y i y_i yi中选取,即与某位同学的安全指数相同;
按照该阈值对这 m m m位同学上学期的挂科情况进行预测,预测正确的次数最多(即准确率最高);
多个阈值均可以达到最高准确率时,选取其中最大的。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 m m m

接下来输入 m m m行,其中第 i ( 1 ≤ i ≤ m ) i(1\le i\le m) i(1im)行包括用空格分隔的两个整数 y i y_i yi r e s u l t i result_i resulti,含义如上文所述。

输出格式

输出到标准输出。

输出一个整数,表示最佳阈值 θ ∗ \theta^* θ

样例1输入

6
0 0
1 0
1 1
3 1
5 1
7 1

样例1输出

3

样例1解释

按照规则一,最佳阈值的选取范围为 0 , 1 , 3 , 5 , 7 0,1,3,5,7 0,1,3,5,7

θ = 0 \theta=0 θ=0时,预测正确次数为 4 4 4

θ = 1 \theta=1 θ=1时,预测正确次数为 5 5 5

θ = 3 \theta=3 θ=3时,预测正确次数为 5 5 5

θ = 5 \theta=5 θ=5时,预测正确次数为 4 4 4

θ = 7 \theta=7 θ=7时,预测正确次数为 3 3 3

阈值选取为 1 1 1 1 1 1时,预测准确率最高; 所以按照规则二,最佳阈值的选取范围缩小为 1 , 3 1,3 1,3

依规则三, θ ∗ = max ⁡ { 1 , 3 } = 3 \theta^*=\max\{1,3\}=3 θ=max{1,3}=3

样例2输入

8
5 1
5 0
5 0
2 1
3 0
4 0
100000000 1

样例2输出

100000000

子任务

70 % 70\% 70%的测试数据保证 m ≤ 200 m\le 200 m200

全部的测试数据保证 2 ≤ m ≤ 1 0 5 2\le m\le 10^5 2m105

思路

注意到此题可以化简思路:对于数组 a a a中的每个值 k e y key key,求出在 r e s u l t ∈ { 0 , 1 } result\in \{0, 1\} result{0,1}时, y ≥ k e y y\ge key ykey y < k e y y\lt key y<key的元素个数。

暴力法:

k e y key key只有一个值时,很容易查找,只需要遍历一遍数组即可解决,所以暴力法的思路是对每个 k e y key key进行枚举。
两层循环,外循环枚举每一个值,内循环遍历每一个数据判断是否满足 p r e d i c t = = r e s u l t predict==result predict==result,进行了两层循环,时间复杂度为 O ( n 2 ) O(n^2) O(n2)
数据量到了 1 0 5 10^5 105级别, O ( n 2 ) O(n^2) O(n2)显然时间会爆掉。

优化算法

一般 1 0 5 10^5 105数据量都会用 O ( n log ⁡ n ) O(n\log n) O(nlogn)的时间复杂度,所以考虑排序算法。
排序后有两个问题:

  1. r e s u l t = 0 result=0 result=0 r e s u l t = 1 result=1 result=1处理方式不同,所以将两种情况单独存储,将 r e s u l t = 0 result=0 result=0 r e s u l t = 1 result=1 result=1的数据用两个 v e c t o r vector vector分开存储。
  2. 排序完的操作:采用二分查找即可

排序的时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn),对每个元素枚举后进行一次二叉查找为 O ( n log ⁡ n ) O(n\log n) O(nlogn),则时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

#include <bits/stdc++.h>
using namespace std;
vector<int> a[2];
int ans, m, x, y, val;
int main() {
    scanf("%d", &m);
    for(int i = 1; i <= m; i++) scanf("%d %d", &x, &y), a[y].push_back(x);
    for(int i = 0; i < 2; i++) sort(a[i].begin(), a[i].end());
    for(int i = 0; i < 2; i++) {
        int len = a[i].size();
        for(int j = 0; j < len; j++) {
            int s = (lower_bound(a[0].begin(), a[0].end(), a[i][j]) - a[0].begin()) + (a[1].size() - (lower_bound(a[1].begin(), a[1].end(), a[i][j]) - a[1].begin()));
            if(s > val || (s == val && a[i][j] > ans)) {
                val = s;
                ans = a[i][j];
            }
        }
    }
    printf("%d", ans);
    return 0;
}

前缀和做法

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
unordered_map<int, bool> ext;
pair<int, int> a[maxn];
int n, x, y, s[maxn], ans, Max;
int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) scanf("%d %d", &x, &y), a[i] = make_pair(x, y);
    sort(a + 1, a + 1 + n);
    for(int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i].second;
    for(int i = 1; i <= n; i++) {
        if(ext[x = a[i].first]) continue;
        ext[x] = true;
        int val = s[n] + i - 1 - 2 * s[i - 1];
        if(val >= Max) {
            Max = val;
            ans = x;
        }
    }
    printf("%d", ans);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CCF认证期末预测之最佳阈值 的相关文章

  • CCF 202012-2 期末预测之最佳阈值 python

    CCF 202012 2 期末预测之最佳阈值 python 100 这道题对时间进行了限制 xff0c 所以要想一次遍历得出结果 xff0c 就应该思考 xff01 样例输入 安全指数011357挂科情况001111 思路详解 lt 前提
  • CCF-CSP【202303-3 LDAP】C++

    CCF CSP 202303 3 LDAP C 43 43 CCF真题网址 第一次提交结果超时 只有20分 题目思路 我的思路较为简单 xff0c 即对于每个匹配表达式 xff0c 遍历N个用户 xff0c 验证是否匹配 对于每个表达式有两
  • CCF C³-20@滴滴:智能技术与交通治理 | 报名

    CCF C 活动第二十期主题是 xff1a 智能技术与交通治理 xff0c 将于2023年5月16日周二 xff08 18 00 21 30 xff09 xff0c 在北京滴滴大厦举行 xff0c 报名从速 作为衣食住行的基本需求之一 xf
  • ccf 游戏

    试题编号 xff1a 201604 4试题名称 xff1a 游戏时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 小明在玩一个电脑游戏 xff0c 游戏在一个 n m的方格图上进行 xff0c
  • 【CCF-CSP】201409-4 最优配餐 C++

    文章目录 一 题目二 解题1 题目2 代码3 提交结果 总结1 代码思路 一 题目 原题目链接 二 解题 1 题目 一个BFS xff08 宽度优先搜索 xff09 的实现 xff0c 用于处理迷宫中的节点 下面是代码的详细解释 xff1a
  • CSP CCF: 202012-2 期末预测之最佳阈值 (C++)

    目录 题目来源题目描述解题过程完整代码 题目来源 链接 CCF 期末预测之最佳阈值 题目描述 解题过程 题目要求为选取合适的安全指数阈值 Theta xff0c 使得该阈值对这 m 位同学上学期的挂科情况进行预测 xff0c 预测正确的次数
  • ccf 画图

    问题描述 试题编号 xff1a 201409 2试题名称 xff1a 画图时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 在一个定义了直角坐标系的纸上 xff0c 画一个 x1 y1 到 x
  • CCF CSP 2021-09-2 非零段划分 题解及满分代码(C++11)

    文章目录 问题描述问题分析70分解法满分解法 问题描述 题目描述 A 1 A 2
  • 2020 CCF 非专业级别软件能力认证第一轮(CSP-S) 提高级 C++ 语言试题

    目录 一 选择题 xff1a 每题 2 分 xff0c 共 15 题 xff0c 30 分 在每小题给出的四个选项中 xff0c 只有一项是符合题目要求的 二 阅读程序 程序输入不超过数组或字符串定义的范围 xff1b 判断题正确填 3 x
  • ccf-csp 期末预测之最佳阈值

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

    span class token comment 2014 09 2 span span class token comment 画图 span span class token macro property span class toke
  • 计算机图形学期刊影响因子,计算机图形学 | CCF推荐期刊专刊信息2条

    原标题 xff1a 计算机图形学 CCF推荐期刊专刊信息2条 图形学与多媒体 Computers amp Graphics Call for papers Shape Modelling International SMI 2019 全文截
  • CCF/CSP 201312-1出现次数最多的数(满分题解Java版)

    CCF 考试 一定要刷历年真题 在提交代码的时候 一定不要把中文注释提交上去了 可能会编译报错 题目描述 201312 1出现次数最多的数 Java题解 import java util ArrayList import java util
  • CSP认证历年真题题解 (Python)

    文章目录 此篇文章是小菜本菜使用Python做CCF CSP的一些记录 希望能够以此帮助到正在为题目苦苦思考 但还没有找到解决思路的朋友们 诚然 这里的代码还有很多值得改进之处 希望各位码友不吝赐教 目前已完成历年的第一题 第二题 第三题正
  • CCF计算机软件能力认证历年真题+超详细解析(C语言)

    这个历年试题解主要使用C语言编写 针对较为简单的第一题和第二题 适合初学者 程序中基本附有注释 希望可以帮到大家 会持续进行补充 欢迎评论区给出更好的解法与思路 2021 12 第 24次 202112 1序列查询 202112 2序列查询
  • CCF-CSP真题《202305-1 重复局面》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看 CCF CSP真题附题解大全 试题编号 202305 1 试题名称 重复局面 时间限制 1 0s 内存限制 512 0MB 问题描述 题目背景 国际象棋在对局时 同一局面连续或间断出现3次或3次以
  • CCF/CSP 201604-2 俄罗斯方块(满分题解Java版)

    此题 猛滴一看确实非常容易让人懵懵的 主要是题目描述的非常不清晰 很难让人能够透彻的理解 如果连题目都看不懂 那就不谈写出代码了 题目描述 官方题目描述 题目地址 题目解读 关键的是要理解题目 Java题解 import java util
  • csp试题1:小明种苹果

    csp试题1 小明种苹果 题目 分析 代码 总结 题目 题目描述 小明在他的果园里种了一些苹果树 为了保证苹果的品质 在种植过程中要进行若干轮疏果操作 也就是提前从树上把不好的苹果去掉 第一轮疏果操作开始前 小明记录了每棵树上苹果的个数 每
  • CCF-CSP-202109-4-收集卡牌

    原题链接 满分代码 include
  • 第十六次CCF认证模拟试题(201903-2):二十四点(Java完整版)

    最近在练习算法 觉得CCF的算法题都还不错 就做了一下子 试卷原题 Java版解法 import java util ArrayList import java util Scanner public class Main public s

随机推荐

  • JWT(auth0):RS256非对称加密算法实现Token的签发、验证

    前言 日常开发中 xff0c 客户端与服务器通常采用HTTP协议进行通信 xff0c 但HTTP是没有状态的 xff0c 无法记录用户的身份信息和行为 会话跟踪技术是一种在客户端与服务器间保持HTTP状态的解决方案 xff0c 我们所熟知的
  • 解决ImportError: libstdc++.so.6: version `GLIBCXX_3.4.22‘ not found

    运行代码时遇到以下错误 就是绿色框里面的文件夹下面缺少GLIBCXX 3 4 22 xff0c 其实换句话说就是该文件夹下缺少文件libstdc 43 43 so 6 22 下载文件lib64stdc 43 43 6 6 2 0 5ubun
  • 推荐系统常用的策略算法—Bandits

    目录 0 推荐系统存在的经典问题 1 什么是 bandit 算法 1 1 Bandit算法起源 1 2 bandit 算法与推荐系统 1 3 怎么选择 bandit 算法 xff1f 1 4 常用 bandit 算法 Thompson sa
  • Tensorflow下VAE(变分自动编码器)在MNIST数据集下的实验

    首先简单介绍一下AE和VAE然后在完成代码实践 一 什么是自编码器 xff08 Auto encoder xff09 自动编码器是一种数据的压缩算法 xff0c 其中数据的压缩和解压缩函数是数据相关的 有损的 从样本中自动学习的 在大部分提
  • 利用python画图

    因为最近论文收尾需要画图 xff0c 于是学了一些画图的东西在这里分享一下 一 环境配置 linux ubuntu 下需安装下面三个包 xff1a Numpy Scipy Matplotlib 分别输入下面的代码进行安装 xff1a 二 开
  • Python实现冒泡排序

    冒泡排序顾名思义就是整个过程就像气泡一样往上升 xff0c 单向冒泡排序的基本思想是 xff08 假设由小到大排序 xff09 xff1a 对于给定的n个记录 xff0c 从第一个记录开始依次对相邻的两个记录进行比较 xff0c 当前面的记
  • 详解贪心算法(Python实现贪心算法典型例题)

    贪心算法 贪心算法 xff08 又称贪婪算法 xff09 是指 xff0c 在对问题求解时 xff0c 总是做出在当前看来是最好的选择 也就是说 xff0c 不从整体最优上加以考虑 xff0c 他所做出的是在某种意义上的局部最优解 贪心算法
  • 详解动态规划算法(Python实现动态规划算法典型例题)

    动态规划 xff08 Dynamic programming xff09 是一种在数学 计算机科学和经济学中使用的 xff0c 通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法 动态规划算法是通过拆分问题 xff0c 定义问题状态
  • CNN卷积神经网络训练时占多少显存(GPU)的计算

    以前总看见别人说某某神经网络参数量有多少 xff0c 大概占用多大的显存等等描述 xff0c 但心里却并不知道为什么是这么多 xff0c 今天看到这篇文章 xff0c 大体上有了一定的理解 参数量的计算 xff1a VGG Network
  • JS编写的科学计算器

    文章为原创 xff0c 转载请注明出处 xff0c 谢谢支持 xff01 进阶版代码地址 xff1a https github com Summer Dong calculator 在此版本中使用了Angular框架和Boostrap xf
  • 安装使用JPEG库遇到的问题(用于交叉编译)

    使用JPEG 官方解码库时出现的问题 xff1a 使用example c 接口编译时 xff1a 1 错误 ubuntu mnt hgfs GZ1961 linux系统文件IO day15 newjpeg gcc main c exampl
  • TP4056 充电电路学习借鉴

    最近计划的一个 DIY 项目有安排充放电锂电池 xff0c 于是搜集了两个比较相似的方案 xff0c 借鉴学习一下 一 TP4056单节锂电池充电板设计方案 原理图 43 源码 顺带说 xff0c 电路城 这个网站还是比较有意思的 xff0
  • WSL2 安装 GUI,并使用 XRDP实现连接(内含汉化操作)

    效果图 随着 wsl2 的发布 xff0c wsl 已经从玩具变成了一个实用的开发利器 xff0c 从最新的微软开发者博客对 wsl 的路线发展规划 xff0c 未来 wsl 将会支持 GPU 计算和 GUI xff08 点此了解详情 xf
  • V4L2打开video设备注意(读写权限)

    V4L2编程中在open 34 dev video 34 时应注意 xff1a 摄像头采集到的数据是最开始是存储在内核空间我们申请的缓冲区中的 xff0c 具体设置如下 xff1a req count 61 5 req type 61 V4
  • mysql 分组取最新的一条记录(整条记录)

    mysql取分组后最新的一条记录 下面两种方法 一种是先筛选 出最大和最新的时间 在连表查询 一种是先排序 然后在次分组查询 默认第一条 就是最新的一条数据了 xff08 此条错误 xff0c 分组mysql官方文档说明 是随机选择分组的一
  • 数据结构:回文判断

    7 1 回文判断 回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 编写一个程序 xff0c 使用栈判定给定的字符序列是否为回文 输入格式 输入待判断的字符序列 xff
  • Proxmox VE /Debian /Ubuntu 设置合上笔记本盖子不休眠的方法

    书接上回和上上回 众所周知 xff0c 服务器是没有AB面的 xff08 KVM当然不算了 xff09 xff0c 燃鹅笔记本有 xff0c 不能让屏幕一直打开亮着吧 xff0c 但是默认都是关闭盖子休眠 xff0c 咋办呢 i i xff
  • 实例解说Linux中fdisk分区使用方法

    实例解说Linux中fdisk分区使用方法 一 fdisk 的介绍 xff1b fdisk Partition table manipulator for Linux xff0c 译成中文的意思是磁盘分区表操作工具 xff1b 本人译的不太
  • ROS 新建py项目并添加话题发布

    目录 一 ros下新建py项目 二 调试运行代码 三 新建话题订阅 发布 一 ros下新建py项目 1 建立工作空间 mkdir ros workspace cd ros workspace mkdir src 2 初始化工作空间 cd到r
  • CCF认证期末预测之最佳阈值

    期末预测之最佳阈值 题目描述 具体来说 xff0c 顿顿评估了 m m m 位同学上学期的安全指数 xff0c 其中第 i 1