PAT——A1080(排序)

题意链接:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 10010
struct Student{
    int GE,GI,sum;
    int r,stuID;
    int cho[6];
}stu[40010];
struct School{
    int quota;
    int stuNum;
    int id[40010];
    int lastAdmit;
}sch[110];
bool cmpStu(Student a,Student b)
{
    if(a.sum!=b.sum)
        return a.sum>b.sum;
    else
        return a.GE>b.GE;
}
bool cmpID(int a,int b)
{
    return stu[a].stuID<stu[b].stuID;
}
int main()
{
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=0;i<m;i++)
    {
        scanf("%d",&sch[i].quota);
        sch[i].stuNum=0;
        sch[i].lastAdmit=-1;
    }
    for(int i=0;i<n;i++)
    {
        stu[i].stuID=i;
        scanf("%d%d",&stu[i].GE,&stu[i].GI);
        stu[i].sum=stu[i].GE+stu[i].GI;
        for(int j=0;j<k;j++)
        {
            scanf("%d",&stu[i].cho[j]);
        }
    }
    sort(stu,stu+n,cmpStu);
    for(int i=0;i<n;i++)
    {
        if(i>0&&stu[i].sum==stu[i-1].sum&&stu[i].GE==stu[i-1].GE)
        {
            stu[i].r=stu[i-1].r;
        }
        else
            stu[i].r=i;
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<k;j++)
        {
            int choice=stu[i].cho[j];
            int num=sch[choice].stuNum;
            int last=sch[choice].lastAdmit;
            if(num<sch[choice].quota||(last!=-1&&stu[i].r==stu[last].r))
            {
                sch[choice].id[num]=i;
                sch[choice].lastAdmit=i;
                sch[choice].stuNum++;
                break;
            }
        }
    }
    for(int i=0;i<m;i++)
    {
        if(sch[i].stuNum>0)
        {
            sort(sch[i].id,sch[i].id+sch[i].stuNum,cmpID);
            for(int j=0;j<sch[i].stuNum;j++)
            {
                printf("%d",stu[sch[i].id[j]].stuID);
                if(j<sch[i].stuNum-1)
                {
                    printf(" ");
                }
            }
        }
        printf("\n");
    }
    return 0;
}

做这种题目思路一定要清晰

一步步来

猜你喜欢

转载自blog.csdn.net/qq_42232118/article/details/81609591
今日推荐