/*
重点:
1.读题先明白需要啥读了一边,你知道是排序题,
而且你还需要一个结构体,所以呢你需要掌握排
序sort的使用(还有cmp(是一个决定如何比较的函数)),
还要掌握如何给结构体中的元素排序,这是重难点。
2.分析题目要求,就是该怎么分类排序
先分类别:
1.德才都超 H 线 >= 按总分排序
2.德到才不到 也按总分排序
3.德才都不到 但德分大于才分 也按总分排序
4.其他到达录取线 也按总分排序
3.机智点:就是他让我们返回那个符合的人数,用
total--很机智嘿嘿
4.需要看输入输出案例,里面会有隐藏信息
*/
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
struct node{
int num,de,cai;
};
bool cmp(node a,node b){//这个是排序要求,文章后会详细介绍它的原理
if((a.cai+a.de)!=(b.cai+b.de))
return (a.cai+a.de)>(b.cai+b.de);
else if(a.de!=b.de)
return a.de>b.de;
else
return a.num<b.num;
}
int main(){
int n,l,h;
cin>>n>>l>>h;
node temp;
vector<node> v[4];//这个很关键的,它将符合要求的放在一起便于我们去处理
int total=n;
for(int i=0;i<n;i++){
scanf("%d%d%d",&temp.num,&temp.de,&temp.cai);
if(temp.cai<l||temp.de<l)
total--;
else if(temp.cai>=h&&temp.de>=h)
v[0].push_back(temp);//STL中的 文章末尾会提到它的作用和如何使用
else if(temp.cai<h&&temp.de>=h)
v[1].push_back(temp);
else if(temp.cai<h&&temp.de<h&&temp.de>=temp.cai)
v[2].push_back(temp);
else
v[3].push_back(temp);
}
printf("%d\n",total);
for(int i=0;i<4;i++){
sort(v[i].begin(),v[i].end(),cmp);//排序题必不可缺
for(int j=0;j<v[i].size();j++){
printf("%d %d %d\n",v[i][j].num,v[i][j].de,v[i][j].cai);
}
}
return 0;
}
1.sort()函数
1)Sort函数包含在#include<algorithm>的c++标准库中
2)Sort函数有三个参数
i)第一个是要排序的数组的起始位置
ii)第二个是要排序的数组的结束位置
iii)第三个是排序的方法,升序还是降序……也就是下面说的cmp
总结起来就是:sort(begin,end,排序方法)
2.cmp
1)手写排序顺序
bool cmp(int a,int b){
return a>b;//从大到小排序
}
bool cmp(int a,int b){
return a<b;//从小到大排序
}
2)当然你可以用c++标准库中的函数了
less<数据类型>();//从小到大排序
greater<数据类型>();//从大到小排序
3.vector
vector函数的头文件是#include<vector>
介绍:在c++中,vector是一个十分有用的容器。
作用:它能够像容器一样存放各种类型的对象。简单说,vector是一个能够存放任意类型的
动态数组,能够增加和压缩数据。
注意:vector作为函数的参数或者返回值时注意他的写法:
int fun(vector<int>&a,vector<int>&b) 其中的&绝对不能丢!!!
1)基本操作
头文件 #include<vector>
创建vector对象 vector<int>vec;
尾部插入数字vec.push_back(a);
使用下标访问元素 cout<<vec[0]<<endl;
使用迭代器访问元素 vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
插入元素: vec.insert(vec.begin()+i,a);//在第i+1个元素前面插入a
删除元素:vec.erase(vec.begin()+i,vec.end+j);//删除区间[i,j-1];
数组大小(不那么准确):vec.size();
清空 vec.clear();
2)算法
头文件 #include<algorithm>
使用reverse(vec.begin(),vec.end());//将元素翻转,逆序排列
使用sort排序sort(vec.begin(),vec.end());//默认升序
vector<int>test;
//建立一个vector,int 为数组元素的数据类型,test为动态数组名
//简单的用法
#include<vector>
#include<iostream>
using namespace std;
int main(){
vector<int>test;
test.push_back(1);
test.push_back(2);
//作用是:test[0]=1;test[1]=2;
}