题意 :

  • 给出n组,每组包含一个字符(+/-)和一个数值
  • 对于任意一个数值x,如果x大于θ\thetaθ且为正,为TP;x大于θ\thetaθ且为负,为FP;x小于θ\thetaθ且为正,为FN;小于θ\thetaθ且为负,为TN
  • 现定义TPR=TP/(TP+FN)TPR=TP/(TP+FN)TPR=TP/(TP+FN),FPR=FP/(TN+FP)FPR=FP/(TN+FP)FPR=FP/(TN+FP)
  • 可以发现TPR即所有字符为正的数值中属于TP的数量,FPR…
  • 可以根据取不同θ\thetaθ时TPR和FPR的值画出曲线,要求根据的ROC曲线,求出AUC(曲线下面积)

思路 :

  • AUC即取到FPR<=1的所有θ\thetaθ对应的TPR这条曲线下的面积,结合图例(分段常数函数)是多个矩形的面积,由若干段TPR*FPR相加,现在的问题是不知道哪里是分界点
  • 发现横纵坐标相乘TPR∗deltaFPR=(TP∗FP)/((TP+FN)∗(TN+FP))TPR*deltaFPR=(TP*FP)/((TP+FN)*(TN+FP))TPR∗deltaFPR=(TP∗FP)/((TP+FN)∗(TN+FP)),又发现分母是所有字符正乘所有字符负,也就是说分母永远是常数,因此可以先将分子累加,最后除分母
  • 根据FPR的值从小到大(由定义公式推出θ\thetaθ从小到大)cmp函数是从小到大的,若值相同,’+'排在‘-’前,这样得到的一组坐标,它的横纵坐标都是递增的(非严格递增)),这样就可以计算了
  • 将+和-的值分别放在两个数组里,进行从小到大的cmp排序
  • a.end() - upper_bound(a.begin(), a.end(), b[i]) 返回大于b[i]的有几个
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#define debug(a) cout << #a << " = " << a << endl;
#define x first
#define y second
using namespace std;
typedef long long ll;const int N = 1e6 + 10;struct node
{char op;int num;
}a[N];int n;bool cmp(node a, node b)
{if (a.num == b.num)     // 如果数值相同则先出现符号为-的return a.op < b.op;return a.num < b.num;   // 先出现数值小的
}int main()
{//    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _ = 1;
//    cin >> _;while (_ -- ){scanf("%d", &n);getchar();      // 同下int po = 0, ne = 0;     // 代表正负总个数for (int i = 1; i <= n; i ++ ){scanf("%c%d", &a[i].op, &a[i].num);getchar();      // 换行也是char,scanf不会自动去掉换行if (a[i].op == '+') po ++ ;else ne ++ ;}sort(a + 1, a + n + 1, cmp);double ans = 0, t = 1;      // 乘积和 & TP*FP(>theta的正负乘积)for (int i = 1; i <= n; i ++ ){if (a[i].op == '-') ans += t / ne;  // 如果符号是'-',说明出现转折,乘积和(面积和)加上那部分else t = t - 1.0 / po;  // 如果符号是'+',}printf("%.10lf\n", ans);        // 误差小于等于1e-9}return 0;
}

题解二 :

  • 当theta变大时,tpr和fpr同时变大,注意到auc函数单调性(当r较大时 我们让FPR尽量大 这样可以让θ尽量大 使得TPR变大),且为若干斜率为0的直线(当r在一段较小的区间内波动时 FPR不会变化 如果让TPR尽量大 就令θ尽量大 此时TPR也不会变化),我们可以分割成一个个的矩形求面积,在遍历的时候将函数分成TN+FP段,每一段长度为1/(tn+fp)
//#pragma GCC optimize(2)#include<bits/stdc++.h>
//#define FAST ios::sync_with_stdio(false); cin.tie(0);
#define int long long
#define eps 1e-9using namespace std;const int MAXN = (int)1e6 + 5;struct Node {char op;int val;
}a[MAXN];int n, TNFP, TPFN, TP, FP;bool cmp(Node& a, Node& b) {if(a.val == b.val) {if(b.op == '+') return false;if(a.op == '+') return true;}return a.val < b.val;
}signed main()
{cin >> n;for(int i = 1; i <= n; i++) {cin >> a[i].op >> a[i].val;if(a[i].op == '+') {TPFN++;} else {TNFP++;}}sort(a + 1, a + 1 + n, cmp);TP = TPFN, FP = 0;int tot = 0;for(int i = 1; i <= n; i++) {if(a[i].op == '+') {       // 每遇到一个'+',tp就减少一个TP--;} else {      // 为'-'时遇到转折点,答案累加乘积(tp*fp)tot += TP;}}long double ans = 1.0 * tot / (TPFN * TNFP);printf("%.9Lf", ans);//cout << ans;return 0;
}

Scholomance Academy 读题训练,模拟(沈阳)相关推荐

  1. Kanade Doesn’t Want to Learn CG 模拟,读题训练,临界

    题意 :给一抛物线,再给一板与一篮筐的侧视图(即四个坐标),球碰到板会根据y轴对称变换方向,判断能否从上到下进入篮筐.临界 :碰撞时包括板的两个端点:进篮筐时不包括篮筐的两个端点 思路 :球碰到板变换 ...

  2. Codeforces 659B Qualifying Contest【模拟,读题】

    写这道题题解的目的就是纪念一下半个小时才读懂题...英文一多读一读就溜号... 读题时还时要静下心来... 题目链接: http://codeforces.com/contest/659/proble ...

  3. PTA寒假基础题训练(含解题思路)(中)

    目录 7-19 两个有序单链表求差集 AC代码: 7-20 统计数字字符和空格 AC代码: 7-21 打印沙漏 AC代码: 7-22 Wifi密码 AC代码: 7-23 福到了 AC代码: 7-24 ...

  4. 第十四届蓝桥杯三月真题刷题训练——第 27 天

    目录 第 1题:数学考试_前缀和 代码: 第 2 题:地标访问_二分 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码: 第 1题:数学考试_前缀和 代码: package 第十 ...

  5. 2022茶艺师(中级)国家题库模拟考试平台操作

    题库来源:安全生产模拟考试一点通公众号小程序 2022茶艺师(中级)练习题为茶艺师(中级)考试题库理论知识考试题库!2022茶艺师(中级)国家题库模拟考试平台操作依据茶艺师(中级)考试大纲.茶艺师(中 ...

  6. 计算机入门及操作技能训练,计算机入门及操作技能训练模拟试题.doc

    计算机入门及操作技能训练模拟试题.doc 计算机入门及操作技能训练模拟试题 2 一.单选题一.单选题 (每空(每空 1 1 分,共分,共 3030 分)分) 1. 1. 下列描述中,正确的是( ) . ...

  7. PTA寒假基础题训练(含解题思路)(下)

    目录 7-36 字符串的冒泡排序 AC代码: 7-37 龟兔赛跑 AC代码: 7-38 N个数求和 AC代码: 7-39 数列求和-加强版 AC代码: 7-40 抓老鼠啊~亏了还是赚了? AC代码: ...

  8. 2022年G1工业锅炉司炉上岗证题库模拟考试平台操作

    题库来源:安全生产模拟考试一点通公众号小程序 2022年G1工业锅炉司炉培训试题为G1工业锅炉司炉题库的新全考试题型!2022年G1工业锅炉司炉上岗证题库模拟考试平台操作根据G1工业锅炉司炉考试教材. ...

  9. 第十四届蓝桥杯三月真题刷题训练——第 23 天

    目录 第 1 题:长草 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:蓝肽子序列_LCS_最长公共子序列dp问题 题目描述 输入描述 输出描述 输入输出样例 运行限 ...

最新文章

  1. Netflix 开源用于 Spring Boot的 GraphQL 服务框架DGS
  2. [转载] 唐浩民评点曾国藩家书(上)——一个不同凡庸的乡村农民
  3. Python-OpenCV 处理图像(六)(七)(八):对象识别 图像灰度化处理 图像二值化处理
  4. 工作129:动态路由
  5. 【转】常用数学函数篇(Linux c)
  6. 22 PP配置-生产车间控制-定义工单类型
  7. 备份表或者备份表结构
  8. c语言学生管理p1指向编译错误,在ubuntu下用C语言编写一个学生管理系统,编译时出错,紧急求救!!!...
  9. 网上订餐系统需求分析报告
  10. perl语言hello world程序
  11. 关于计算机信息管理的照片,2021年10月山东计算机科学与技术(原计算机信息管理)专业自考报名需上传电子照片...
  12. 哇嘎显示等待无服务器,vagaa搜索不到资源怎么回事?vagaa哇嘎搜索没反应的解决方法...
  13. java根据word模板生成word文档_根据Word模板生成Word文件 (JAVA POI)
  14. 滴滴美团58携程,那些发生在大并购谈判桌背后的故事
  15. 移动手机号服务密码重置
  16. larval 进程管理
  17. 如何做好Clickhouse集群的监控覆盖?
  18. kvs(Kyoto Visualization System)的初次使用
  19. Java Transaction silently rolled back because it has been marked as rollback-only问题解决
  20. MOOG D634-319C

热门文章

  1. BADI EXIT等增强报W警告类消息
  2. 如何蒸螃蟹?教你蒸螃蟹3个小窍门
  3. 用dwz+springmvc出现这个问题Http status: 200 OK ajaxOptions: parsererror thrownError
  4. Excel表格复制到word中
  5. 共享童车,怎么还没火就凉了
  6. php微信墙开发,Node.js如何开发微信墙
  7. android软件更新模块实现的技术和方法,Android APK签名原理及方法
  8. python查询数据库带逗号_浅谈pymysql查询语句中带有in时传递参数的问题
  9. 计算机负数用英语怎么说,负数在计算机中如何表示
  10. BUUCTF--Misc---easycap 追踪TCP流