题解 P1068 【分数线划定】

· · 题解

冒泡排序

暴力冒泡,不用结构体

大佬们的算法太高深了!!!本蒟蒻写一篇不用结构体的!!! 当我们在用冒泡排序时,交换满足条件的数据时,完全可以将这个数据的序号以及其他项全部交换,这样其实就起到了结构体的作用!!!!!

本蒟蒻代码如下:

#include <iostream>
#include <cmath>
using namespace std;
int a[10010],b,n,c[10010],ans,d[10010],e[10010];//以上不解释。
int main()
{
    cin>>n>>b;//根据题目要求读入。
    int r;
    r=floor(b*1.5);//求出分数线名次。
    for(int i=1;i<=n;i++)cin>>c[i]>>a[i];//读入不解释。
    for(int i=1;i<=n-1;i++)
    {
        for(int w=1;w<=n;w++)
        {
        if(a[w]<a[w+1])//如果前项分数小于后项分数,交换两项分数以及序号,这样就起到了交换位置的作用。
        {
            swap(a[w],a[w+1]);
            swap(c[w],c[w+1]);
        }
        if(a[w]==a[w+1]&&c[w]>c[w+1])//当分数相等但是序号大时
        {
            swap(a[w],a[w+1]);//其实这个可以省略。
            swap(c[w],c[w+1]);//不能省!!!交换序号==交换位置
        }
    }
    }
    ans=a[r];
    int t=0;
    cout<<ans<<" ";//输出分数线
    for(int i=1;i<=n;i++)//找满足条件的分数并将分数以及序号存到单独数组中。
    if(a[i]>=ans)
    {
        d[i]=c[i];
        e[i]=a[i];
        t++;
    }
    cout<<t<<endl;//输出录取人数。
    for(int i=1;i<=n;i++)//输出。
    if(e[i]!=0)cout<<d[i]<<" "<<e[i]<<endl;
    return 0;
}

轻松AC~~