专栏文章

题解:P1068 [NOIP2009 普及组] 分数线划定

P1068题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miqkreg7
此快照首次捕获于
2025/12/04 06:24
3 个月前
此快照最后确认于
2025/12/04 06:24
3 个月前
查看原文

思路

可以用结构体来做。
  • 如果相比的两个数的成绩不同,就按成绩来从大到小排序。否则就按报名号来从小到大排序。
  • 分数线是第 1.5m1.5m 名选手的成绩,然后再去成绩中去统计大于等于分数线的人数。
  • 最后再按照进入面试的选手,分别输出报名号和成绩。

排序关键代码:

CPP
bool cmp(stu a,stu b){
	if(a.s!=b.s){
		return a.s>b.s;
	}else{
		return a.k<b.k;
	}
}

代码

CPP
#include <bits/stdc++.h>
using namespace std;
struct stu{
	int k,s;
}a[5005];
bool cmp(stu a,stu b){
	if(a.s!=b.s){
		return a.s>b.s;
	}else{
		return a.k<b.k;
	}
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i].k>>a[i].s;
	}
	sort(a+1,a+1+n,cmp);
	int t=m*1.5;
	int cnt=a[t].s;
	int sum=0;
	for(int i=1;i<=n;i++){
		if(a[i].s>=cnt){
			sum++;
		}
	}
	cout<<cnt<<' '<<sum<<endl;
	for(int i=1;i<=sum;i++){
		cout<<a[i].k<<' '<<a[i].s<<endl;
	}
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...