???
原题链接:5.分数线划定2023-11-29 22:18:36
发布于:江苏
这个咋WA了
我服了
#include<bits/stdc++.h>
using namespace std;
struct people
{
int id,score;
}a[5010];
bool jntm(people x,people y)
{
if(x.score!=y.score)
return x.score>y.score;
else if(x.id!=y.id)
return x.id<y.id;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i].id>>a[i].score;
sort(a,a+n,jntm);
int t=m*1.5+1;
cout<<a[t-1].score<<" "<<t<<endl;
for(int i=0;i<m*1.5;i++)
cout<<a[i].id<<" "<<a[i].score<<endl;
return 0;
}
求各位大佬帮帮!
全部评论 7
你的代码有几个小问题和改进的地方。根据题目的要求,以下是一个修正和改进后的版本:
函数 jntm 的返回值:这个函数在比较两个对象时,应该是返回一个 bool 值。你的代码缺少了 return 语句,可能会导致未定义的行为。
确定最终面试名单的筛选:在计算面试分数线后,你需要筛选出所有分数高于或等于此分数线的选手,而不仅仅是前 m * 1.5 名选手。
输出逻辑:需要输出所有从 S 到 T 的选手的情况,而不是仅仅前 m * 1.5 名选手。
以下是修正后的代码:
#include<bits/stdc++.h>
using namespace std;struct people {
int id, score;
};bool compare(people x, people y) {
if (x.score != y.score)
return x.score > y.score; // 降序
else
return x.id < y.id; // 升序
}int main() {
int n, m;
cin >> n >> m;
vector<people> a(n);for(int i = 0; i < n; i++) cin >> a[i].id >> a[i].score; // 排序 sort(a.begin(), a.end(), compare); // 计算面试分数线 int cut_off_index = floor(m * 1.5); // 向下取整 int cut_off_score = a[cut_off_index - 1].score; // 筛选进入面试的选手 vector<people> qualified; for (const auto& person : a) { if (person.score >= cut_off_score) qualified.push_back(person); } // 输出结果 cout << cut_off_score << " " << qualified.size() << endl; for (const auto& person : qualified) { cout << person.id << " " << person.score << endl; } return 0;
}
代码说明:
结构体定义:people 结构体用于存储选手的报名号和分数。
比较函数:compare 函数用来比较两名选手,按照分数降序、报名号升序的规则进行排序。
读取输入:使用 cin 读取选手的报名号和分数,并存入 vector<people> 中。
排序:调用 sort 函数对选手进行排序。
计算分数线:依据公式计算分数线,并获取分数线的确切分数。
筛选合格选手:筛选出所有分数高于或等于分数线的选手。
输出结果:输出分数线和合格选手的信息。
注意事项:
确保使用 floor 进行取整,可以通过将乘法转换为整数后再进行除法来避免浮点数精度问题。
输入和输出的格式需严格遵循题目的要求,以便于测试和验证2024-10-26 来自 江苏
0#include <stdio.h> void sort(int a[],int b[],int n){ int i,j,t,tt; for(i = 0; i < n-1; i++) { for(j = 0; j < n-i-1; j++) { if(b[j] < b[j+1] || (b[j] == b[j+1] && a[j] > a[j+1])) { t = b[j]; tt = a[j]; b[j] = b[j+1]; a[j] = a[j+1]; b[j+1] = t; a[j+1] = tt; } } } }int main(){ int n,m,mm; scanf("%d %d",&n,&m); int i,s = 0,fen; int a[5000],b[5000]; mm=m*1.5; for(i = 0; i < n; i++){ scanf("%d %d",&a[i],&b[i]); }sort(a,b,n); fen = b[mm-1]; for(i = 0; i < n; i++){ if(b[i]>=fen) s++; } printf("%d %d\n",fen,s); for(i = 0; i < s; i++) { printf("%d %d\n",a[i],b[i]); } return 0; }
2024-08-30 来自 山东
0这是AI说的
2024-03-02 来自 浙江
03.先输出面试分数线和实际进入面试的选手人数,然后按要求输出这些选手的信息。
2024-03-02 来自 浙江
02.面试分数线line的确定:根据排名第m*1.5(向下取整)的选手的成绩确定面试分数线。
2024-03-02 来自 浙江
01.计算t时的调整
原代码中,t=m1.5+1;可能会导致错误的分数线计算。正确的应该是(int)(m * 1.5) - 1;,因为我们需要的是排名m1.5(向下取整)的选手的成绩作为分数线,而数组下标是从0开始的,所以需要减1。2024-03-02 来自 浙江
0如果分数一样的话,就得都输出,而不是只输出前m*1.5个,不然如果id大的但过分数线的就不会被进入面试,很不公平()
2024-02-17 来自 广东
0
有帮助,赞一个