避免双重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 }
函数成员 | 函数功能 |
---|---|
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