录取优生(c++题解)

目描述

题目描述

 名考生参加了入学考试。

编号为的考生数学得了分,英语得了分。

录取结果如下:

  1. 录取数学成绩最高的名考生。
  2. 然后,在未被录取的考生中,录取英语成绩最高的名考生。
  3. 然后,在未被录取的考生中,录取数学和英语总分最高的名考生。
  4. 未被录取的考生不予录取。

这里,第这三种情况中,优先录取考生编号较小的考生

输出被录取考生的考生号,按升序排列,一行一个。

输入格式

第一行:输入四个整数 

第二行: 个整数表示 

第三行: 个整数表示 

输出格式

输出被录取考生的考生号,按升序排列,一行一个。

样例
样例输入1
复制6 1 0 2
80 60 80 60 70 70
40 20 50 90 90 80
样例输出1
复制1
4
5
样例解释1
  • 首先,录取数学成绩最高的考生。
    • 考生与考生数学成绩最高分并列,优先录取编号较小者,因此考生被录取。
  • 然后,在尚未录取的考生中,录取了英语成绩最高的名考生。
    • 显然,这并不影响录取。
  • 然后,在未被录取的考生中,录取数学和英语总分最高的名考生。
    • 首先,在未被录取的考生中,录取总分最高的分的考生。
    • 接着,在未被录取的考生中,考生与考生并列,总分分。优先录取编号较小者,考生被录取。

因此,被录取考生的考生号分别为、和。按升序打印。

样例输入2
复制5 2 1 2
0 100 0 100 0
0 0 100 100 0
样例输出2
复制1
2
3
4
5
样例输入3
复制15 4 3 2
30 65 20 95 100 45 70 85 20 35 95 50 40 15 85
0 25 45 35 65 70 80 90 40 55 20 20 45 75 100
样例输出3
复制2
4
5
6
7
8
11
14
15

____________________________________________________________________________
日常发作业题解。 

也是简单到爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆表的题

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

_________________________________________________________________________

#include 
using namespace std;
struct node{
	int bian;
	int E;
	int M;
	int q;
}a[1000005];
int n,x,y,z;
bool cmp1(node a,node b){
	if(a.M!=b.M)return a.Mb.bian;
}
bool cmp2(node a,node b){
	if(a.E!=b.E)return a.Eb.bian;
}
bool cmp3(node a,node b){
	if(a.E+a.M!=b.E+b.M)return a.E+a.Mb.bian;
}
bool cmp4(node a,node b){
	return a.bian>n;
	cin>>x>>y>>z;
	for(int i=1;i<=n;i++){
		cin>>a[i].M;
		a[i].bian=i,a[i].q=0;
	} 
	for(int i=1;i<=n;i++){
		cin>>a[i].E;
	} 
	sort(a+1,a+1+n,cmp1);
	for(int i=n;i>n-x;i--)a[i].q=1;
	sort(a+1,a+1+n,cmp2);
	int l=n;
	while(y>0){
		if(a[l].q!=1){
			a[l].q=1;
			y--;
		}
		l--;
	}
	sort(a+1,a+1+n,cmp3);
	int r=n;
	while(z>0){
		if(a[r].q!=1){
			a[r].q=1;
			z--;
		}
		r--;
	} 
	sort(a+1,a+1+n,cmp4);
	for(int i=1;i<=n;i++){
		if(a[i].q==1)cout<

 

你可能感兴趣的:(c++,算法,开发语言)