K - Scholomance Academy Gym - 103202K

news2024/10/6 2:23:22

题目链接
题意:很长,读了很长时间才懂:

就是给一个物品评分,假设分数大于等于x,就将其判断为正数,否则判断为负数

这样判断肯定会出现一些误判,那么我们将判为负数的正数成为假正数(FN),将判为正数的负数成为假负数(FP)

其中判为正数的正数成为TP,判为负数的负数成为TN
在这里插入图片描述

下面是要求的结果:
在这里插入图片描述
就是求出FPR<=r的最大值,然后求微分,其实也就是求下图中的面积:
在这里插入图片描述
做法:我们首先想到就是暴力,每次设置为输入的所有的值然后再一次循环找到每个值的情况(TP,TN,FP,FN),然后求出值。但是1e6太大,超时;所以我们想到去排序去解决问题

我们可以将初始值设置到无限大,这样先求出初始的状况,然后一步一步的往前递推即可(至于为什么开始的时候设置为最大而不是最小,下面会有解释)
具体的问题在代码中分析
下面是AC代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<bits/stdc++.h>

using namespace std;
const int N=1e6+10;
struct node 
{
    char op;
    int v;
    bool operator < (node &w)
    {
        if(v!=w.v) return v<w.v;
        return op<w.op;
    }
}a[N];
int main()
{
    //如果是相同的直接
    int tp=0,fp=0,tn=0,fn=0;
    int n;
    cin>>n;
    //假设初始值为0
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].op>>a[i].v;
        if(a[i].op=='+') fn++;
        if(a[i].op=='-') tn++;
    }
    sort(a+1,a+1+n);
    double ans=0;
    double prefix=0;
    for(int i=n;i>=1;i--)//这里应该从后往前遍历,因为从前往后没有一个从上一个状态到下一个状态的转换过程:假设我们将初始的设置为最小值,那么当前的正数在上一次设置为真正数,这次仍然为真正数;当前的负数上一次被设置为假正数,这次仍然为假正数,所以没有一个变化的过程,究其根本,就是题中的关系是一个>=的关系,即>=的本数的被设置为正数;所以从>到=是没有变化的,而如果本题改成了>关系,就可以从前往后,而不是从后往前了。
    {
        if(a[i].op=='-')//假设这次为负数,上次被设置为了真负数,这次被设置为了假正数
        {
            tn--;
            fp++;
        }
        else//假设这次为正数,上次被设置为了假负数,这次被设置为了真正数
        {
            fn--;
            tp++;
        }
        ans+=1.0*tp/(tp+fn)*(1.0*fp/(tn+fp)-prefix);//具体的可以看一下图,我们求面积一定要减去前面的一块
        prefix=1.0*fp/(tn+fp);//更新前面横坐标值
    }
    printf("%.10lf",ans);
    return 0;
}

这个题还有一个要注意的点是我们一定是当两个数相等的时候我们一定要将+放在前面,这样从后往前暴力的时候先便利的是‘-’,即先更新的是横坐标,这样可以保证得到的坐标都是非递减的,这样求得值才会是正确的(这是网上的大多数答案,我理解了很久,也不是很理解),我从数据方面理解了一下,我们看到下面的数据:(测试样例第三组)
我们分析一下第三组测试样例:
设判断值=34时:
TP=2,FP=2,TN=2,FN=2
此时TPR=0.5,FPR=0.5
设判断值=38时:
TP=1,FP=1,TN=3,FN=3
此时TPR=0.25,FPR=0.25
上面34和排完序与34相邻的数38的数据
在这里插入图片描述
这个是按照‘-‘排在前面的方法,我们看那个+34和-34的数据,发现纵坐标先改变,也就是当FPR=0.25的时候,TPR可以等于0.5这是错误的,因为这里是不会产生突变的。我们再看题目中给的图这也是错误的。
而下面是正确的数据:

我们发现,这个里面就是只有等于FPR=0.5的时候TPR=0.5,而那个0.25只是一个中间数据,作为一个转折点,因为他是一个突变,我们不能斜着画线,所以我们突变前的那个中间数据算。这个题第三组样例给的很好,应该是暗示往哪方面想。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C. Set or Decrease(二分 + 有两个不确定情况如何二分)

Problem - 1622C - Codeforces 给你一个整数数组a1,a2,...,an和整数k。 在一个步骤中&#xff0c;你可以 选择某个索引i并将ai减少1&#xff08;使aiai-1&#xff09;。 或者选择两个索引i和j&#xff0c;将ai等于aj&#xff08;使aiaj&#xff09;。 为了使数组∑i1nai≤k的…

启动服务提供者报 zookeeper not connected错

今天启动zookeeper的服务提供者后&#xff0c;报 zookeeper not connected错&#xff0c;记录一下解决过程 意思是zookeeper注册中心连接不上&#xff0c;无非两个原因&#xff1a; 第一&#xff1a;zookeeper没有启动好。第二&#xff1a;zookeeper的ip以及端口号配置没配好 …

算法day35|860,406,452

目录 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球 860.柠檬水找零 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five,ten,twenty 0,0,0for bill in bills:#情况一&#xff1a;如果bills是5元&#xff0c;不需要找零if bill…

黑马点评--附近商铺

附近商铺 GEO数据结构 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本加入了对GEO的支持&#xff0c;允许存储地理坐标消息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0…

gcexcel-java-5.2.5 Crack update in 2022-11-28

gcexcel高速 Java Excel 电子表格 API 库 在 Java 应用程序中以编程方式创建、编辑、导入和导出 Excel 电子表格。几乎可以在任何地方部署。 创建、加载、编辑和保存 Excel 电子表格 保存为 .XLSX、PDF、HTML、CSV 和 JSON 基于具有零 Excel 依赖性的 Excel 对象模型 在本地、…

Tomcat负载均衡部署动静分离

NginxTomcat架构拓扑 环境部署 Nginx服务器&#xff1a;IP地址192.168.32.3 Tomcat服务器1&#xff1a;IP地址192.168.32.4 Tomcat服务器2&#xff1a;IP地址192.168.32.5 关闭防火墙&#xff0c;关闭开机自启 systemctl stop firewalld.service setenforce 0Nginx 主机安…

计算机组成原理习题课第三章-1(唐朔飞)

计算机组成原理习题课第三章-1&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

高电压放大器与高电流放大器该如何选择使用

虽然电压放大器和电流放大器都属于功率放大器的分支类型&#xff0c;所能起到的效果和作用也都是一致的&#xff0c;不过两者还是细微差别的。经常会有人在后台咨询“电压放大器和电流放大器有什么区别&#xff0c;该如何选择使用”等等&#xff0c;针对这些疑问&#xff0c;今…

zynq实现视频动态字符叠加OSD,提供2套工程源码和技术支持

目录1.网上同行的OSD方案(太low)2.本方案OSD的优势3.HLS实现方案4.OSD延时和资源占用情况5.工程1&#xff1a;zynq7100实现字符叠加6.上板调试验证7.福利&#xff1a;工程源码获取1.网上同行的OSD方案(太low) 视频的字符叠加&#xff0c;简称OSD&#xff0c;是FPGA图像处理的基…

PG::Vegeta1

nmap -Pn -p- -T4 --min-rate1000 192.168.201.73 nmap -Pn -p 22,80 -sCV 192.168.201.73 查看80端口的服务。 没有发现可用的信息&#xff0c;尝试爆破路径。 gobuster dir -e -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -u htt…

年薪50W的数字前端设计工程师是做什么的?

近两年&#xff0c;芯片行业大火&#xff0c;行业的发展受到了很大的政策支持&#xff0c;芯片行业不仅发展前景好&#xff0c;薪资待遇也很高&#xff0c;所以不少人纷纷转行IC&#xff0c;那么转行IC岗位该如何选择呢&#xff1f;下面IC修真院就重点为大家来介绍一下数字前端…

【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位&#xff0c;原因如下&#xff1a; &#xff08;1&#xff09;卫星定位要求没有障碍物遮挡&#xff0c;它在户外比较精准&#xff0c;在室内信号就…

【Canvas】js用canvas绘制一个钟表时钟动画效果

学习JavaScript的看过来&#xff0c;有没有兴趣用Canvas画图呢&#xff0c;可以画很多有趣的事物&#xff0c;自由发挥想象&#xff0c;收获多多哦&#xff0c;旋转角度绘图这个重点掌握到了吗&#xff0c;这里有一个例子&#xff0c;如何用canvas画钟表时钟动图效果&#xff0…

Mybatis:快速搭建Mybatis(2)

快速搭建Mybatis搭建Mybatis目录框架步骤一&#xff1a;创建Maven工程步骤二&#xff1a;创建mybatis的核心配置文件步骤三&#xff1a;创建mapper接口步骤四&#xff1a;创建Mybatis的映射文件步骤四&#xff1a;通过junit测试增删改查功能步骤五&#xff1a;加入logback日志功…

【JavaSE】String类型

目录 1. Java中为何要有 String 类&#xff1f; 2. String 类中的常用方法 2.1 String 类中的构造方法 2.2 String 类对象的比较 2.2.1 比较是否引用同一个对象 2.2.2 使用 equals 方法 2.2.3 compareTo 方法 2.3 字符串的查找 2.4 字符串与别的数据类型的转换 2.4.1 数值和字…

RationalDMIS 2022位置度评价,轮廓度评价时, 元素理论值变了,如何一劳永逸解决!

1,几何尺寸和公差符号 2.通用尺寸公差符号 3.位置度(Position) 位置度的被测要素有点、直线和平面,基准要素主要有直线和平面。给定位置度的被测要素相对于基准要素必须保持图样给定的正确位置关系,被测要素相对于基准要素的正确位置关系应由基准要素和理论正确尺寸来…

python mitmproxy +雷电模拟器 安装

第一步 安装mitmproxy 首先在安装好python 的情况下 pip install mitmproxy 第二步 电脑端安装证书 进入这个目录下 如果没有就重新mitmproxy 点击mitmproxy-ca.p12&#xff0c;在电脑端安装证书 点击下一页 点击下一页 不用管密码直接下一页 按照途中选择&…

基于Spring更简单的读取和存储对象

在spring的创建和使用这篇博客中有讲到关于Spring存储和读取Bean对象的操作,但是细心的朋友有没有发现那些操作没有想象中的简单呢?所以呀,我今天要给朋友分享的是更简单的存储和读取Bean对象的方法,快来看看吧~ 在Spring中想要更简单的存储和读取对象的核心就是使用注解,这就…

蓝牙学习四(广播)

1.简介 什么叫做广播&#xff0c;顾名思义就像广场上的大喇叭一样&#xff0c;不停的向外传输着信号。不同的是&#xff0c;大喇叭传输的是音频信号&#xff0c;而蓝牙传输的是射频信号。 BLE使用的是无线电波传递信息&#xff0c;就是将数据编码&#xff0c;调制到射频信号中发…

cmake使用

1. cmake概述及例子 CMake快速入门 cmake、qmake、cl之间关系 1.1 各种cmake cmake根据CMakeLists.txt生成makefile&#xff0c;make根据makefile行编译。 1.1.1 最简cmake&#xff1a;生成可执行程序&#xff08;一个文件&#xff09; #CMakeLists.txt cmake_minimum_req…