本题求调
2026-06-16 19:11:12
发布于:福建
题目描述
岛得螺保安公司正在进行一年一度的优秀干员评选活动。在本次评选中,岛得螺的领袖米阿驴将根据每位干员的作战记录,评选出年度最佳干员。
米阿驴手中共有 n 份特级作战记录,其中第 i 份记录对应编号为 i 的干员。每份作战记录包含以下信息:
干员名称:s
任务危险程度:d
任务评分:f
任务奖金:g
米阿驴制定了以下评选标准:
危险程度:干员执行的任务危险程度越高,越优秀。
任务评分:如果危险程度相同,则任务评分越高者越优秀。
任务奖金:如果危险程度和评分均相同,则任务奖金越高者越优秀。
资历:如果以上条件均相同,则编号越小(资历越老)的干员越优秀。
特别说明:
如果某位干员的任务危险程度超过 200,则该干员将直接被授予“神”的称号,且不参与优秀干员的评选。
你的任务是帮助米阿驴完成以下工作:
筛选出所有被授予“神”称号的干员。
对剩余干员按照评选标准进行排序,并输出优秀干员名单。
输入格式
第一行包含一个整数 n,表示作战记录的数量。
接下来 n 行,每行描述一份作战记录,包含以下信息:
干员名称 s(由大小写字母和数字组成,长度不超过 20)。
任务危险程度 d(1≤d≤300)。
任务评分 f(1≤f≤100)。
任务奖金 g(1≤g≤10
6
)。
输出格式
假设有n
1
位被授予“神”称号的干员,以及n
2
位优秀干员。
首先输出n
1
行,内容为所有被授予“神”称号的干员名称。这些名称需按照干员编号从小到大的顺序排列,每行输出一个干员名称。(“神”称号干员可能不存在)
随后输出n
2
行,展示优秀干员的名单。这些干员需依据优秀程度从高到低进行排序,同样每行输出一个干员名称。
输入输出样例
输入#1
复制
3
A 201 90 1000
B 200 95 500
C 200 95 500
输出#1
复制
A
B
C
输入#2
复制
5
Z 200 90 200
W 200 85 300
V 150 95 500
X 300 80 100
Y 200 90 200
输出#2
复制
X
Z
Y
W
V
说明/提示
【样例一解释】
筛选“神”称号的干员:
干员 A 的危险程度为 201(超过 200),直接被授予“神”称号。
输出所有“神”称号的干员名称,按编号升序排列。此处仅 A 满足条件,直接输出。
优秀干员排序:
剩余干员 B(编号 2)和 C(编号 3)的 d 均为 200,f 均为 95,g 均为 500。
根据“资历”规则(编号更小者优先),B 排在 C 前。
最终输出顺序为 B 和 C。
数据约束
对于 30%的数据 : 1≤n≤2×10
2
,1≤d≤100,1≤f≤100,1≤g≤100。
对于 50%的数据 : 1≤n≤2×10
2
,1≤d≤300,1≤f≤100,1≤g≤100。
对于 100%的数据 : 1≤n≤2×10
5
,1≤d≤300,1≤f≤100,1≤g≤10
6
。
#include<bits/stdc++.h>
using namespace std;
int sheng[200010];
struct number{
string s;
int d,f,g;
int old;
}a[200010];
bool cmp(number a,number b){
if(a.d!=b.d){
return a.d>b.d;
}else if(a.f!=b.f){
return a.f>b.f;
}else if(a.g>b.g){
return a.g>b.g;
}else{
return a.old<b.old;
}
}
int main(){
int n;
cin>>n;
int bro=0;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].d>>a[i].f>>a[i].g;
a[i].old=i;
}
for(int i=1;i<=n;i++){
if(a[i].d>200){
cout<<a[i].s<<endl;
sheng[bro]=i;
bro++;
}
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(i!=sheng[bro]){
cout<<a[i].s<<endl;
}
}
return 0;
}
求调,没招了。
调的都是我跌
对了,求点赞+关注 注*本人只学完了语法入门(所以太难得听不懂)






这里空空如也





















有帮助,赞一个