2018/12/02 中石油2018-2019赛季多校联合新生训练赛第一场部分题解

Problem A:录取分数线
原题地址
题目大意:要按成绩取前m名,如果在边界出现重分则可以不足m名(舍去边界的分数)
分析:第一步自然是排序,然后开始找边界,当人数满足m时判断这一名与前一名的分数是否相同,如果相同则继续往上取直至不同为止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<bits/stdc++.h>
using namespace std;
bool compare (int x,int y)
{
return x>y;
}
int main()
{
int n,m;
cin>>n>>m;
int a[1010];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,compare);
int sum=0;
for(int i=0;i<n;i++)
{
sum++;
if(sum==m)
{
if(a[i]!=a[i+1])
cout<<a[i];
if(a[i]==a[i+1])
{
while(a[i]==a[i-1])
{
i--;
}
cout<<a[i-1];
}
break;
}
}
return 0;
}

Problem E:谁是冠军
原题地址
贼蠢,脑子发热自闭了,白给了无数次,罚时上天,这个问题一定要纠正,比赛时细节决定成败。
可以用结构体,也可用数组实现,记录一下每个球队的得分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<bits/stdc++.h>
using namespace std;
struct qiudui
{
int num,s,p,f,sum;
}a[1100];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i].num>>a[i].s>>a[i].p>>a[i].f;
a[i].sum=a[i].s*3+a[i].p-a[i].f;
}
int Maxn=a[0].num,Maxs=a[0].sum;
for(int i=1;i<n;i++)
{
if(Maxs<a[i].sum)
{
Maxs=a[i].sum;
Maxn=a[i].num;
}
}
cout<<Maxn;
return 0;
}

坚持原创技术分享,您的支持也将成为我的动力!
-------------本文结束感谢您的阅读-------------
undefined