• CSP202012-2 期末预测之最佳阈值


     避免双重for循环(超时)

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 using namespace std;
     5 const int m=100000;
     6 struct node 
     7 {
     8     int data, result, chance;
     9 }student[m];
    10 bool cmp(node a, node b)
    11 {
    12     if (a.data == b.data)
    13     {
    14         return a.result > b.result;
    15     }
    16     else
    17     {
    18         return a.data < b.data;
    19     }
    20 }
    21 int main(void)
    22 {
    23     int n;
    24     cin >> n;
    25     for (int i = 0; i < n; i++)
    26     {
    27         cin >> student[i].data >> student[i].result;
    28         student[i].chance = 0;
    29     }
    30     sort(student, student + n, cmp);
    31     //找出最大阈值准确率
    32     for (int i = 0; i < n - 1; i++)
    33     {
    34         if (student[i].result == 0)
    35         {
    36             student[n - 1].chance++;
    37         }
    38     }
    39     if (student[n - 1].result == 1)
    40     {
    41         student[n - 1].chance++;
    42     }
    43     //获取前一个阈值的准确率
    44     for (int i = n - 1; i >= 0; i--)
    45     {
    46         student[i].chance = student[i + 1].chance;
    47         if (student[i].result == 1)
    48         {
    49             student[i].chance++;
    50         }
    51         else
    52         {
    53             student[i].chance--;
    54         }
    55     }
    56     //去重
    57     for (int i = 0; i < n - 1; i++)
    58     {
    59         if (student[i].data == student[i + 1].data)
    60         {
    61             student[i + 1].chance = student[i].chance;
    62         }
    63     }
    64     //找到阈值
    65     int t = student[0].chance;
    66     int max;
    67     for (int i = 0; i < n; i++)
    68     {
    69         if (t <= student[i].chance)
    70         {
    71             t = student[i].chance;
    72             max = student[i].data;
    73         }
    74     }
    75     
    76         cout << max;
    77     return 0;
    78 }    
    表 1 vector 容器的成员函数
    函数成员函数功能
    begin() 返回指向容器中第一个元素的迭代器。
    end() 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
    rbegin() 返回指向最后一个元素的迭代器。
    rend() 返回指向第一个元素所在位置前一个位置的迭代器。
    cbegin() 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
    cend() 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
    crbegin() 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
    crend() 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
    size() 返回实际元素个数。
    max_size() 返回元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。
    resize() 改变实际元素的个数。
    capacity() 返回当前容量。
    empty() 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。
    reserve() 增加容器的容量。
    shrink _to_fit() 将内存减少到等于当前元素实际所使用的大小。
    operator[ ] 重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。
    at() 使用经过边界检查的索引访问元素。
    front() 返回第一个元素的引用。
    back() 返回最后一个元素的引用。
    data() 返回指向容器中第一个元素的指针。
    assign() 用新元素替换原有内容。
    push_back() 在序列的尾部添加一个元素。
    pop_back() 移出序列尾部的元素。
    insert() 在指定的位置插入一个或多个元素。
    erase() 移出一个元素或一段元素。
    clear() 移出所有的元素,容器大小变为 0。
    swap() 交换两个容器的所有元素。
    emplace() 在指定的位置直接生成一个元素。
    emplace_back() 在序列尾部生成一个元素。

    sort函数

    函数声明:

    复制代码
    #include <algorithm>
     
    template< class RandomIt >
    void sort( RandomIt first, RandomIt last );
     
    template< class RandomIt, class Compare >
    void sort( RandomIt first, RandomIt last, Compare comp );
    复制代码

    形式:sort(first_pointer,first_pointer+n,cmp)

    参数解释: 第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。第二个参数相对较好理解,即首地址加上数组的长度n(代表尾地址的下一地址)。最后一个参数是比较函数的名称(自定义函数cmp),这个比较函数可以不写,即第三个参数可以缺省,这样sort会默认按数组升序排序

    简单例子:对数组A的0~n-1元素进行升序排序,只要写sort(A,A+n)即可;对于向量V也一样,sort(v.begin(),v.end())即可。

    来击个掌啊,拉亚斯特!

     

    参考:

    http://c.biancheng.net/view/6749.html

    https://www.cnblogs.com/AlvinZH/p/6784862.html

    https://blog.csdn.net/weixin_45693289/article/details/115877445?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.control&spm=1001.2101.3001.4242

  • 相关阅读:
    重读SQLServer技术内幕 -- 故障检测概要
    Android Studio调试React Native项目
    Android 异常处理
    第一天
    记一次"未将对象引用设置到对象的实例"问题的排查过程
    Hyper-V连接虚拟机异常,“无法进行连接,因为可能无法将凭据发送到远程计算机”
    关于TFS2012无法发送警报邮件的问题
    BaseAdapter日常的封装
    android自定义拍照
    Android系统拍照源码
  • 原文地址:https://www.cnblogs.com/qingdaodaozhu/p/15207303.html
Copyright © 2020-2023  润新知