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

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

#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;
}
文章作者: Hao.Jia
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hao.Jia's Blog
题解 集训赛
喜欢就支持一下吧