温暖名字 2021-01-15 14:14 采纳率: 100%
浏览 130
已采纳

pat A1080 Graduate Admission 测试点四为什么段错误?

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct student{
    int ge,sum,rank,id;
    vector<int> pre;
}s[40010];
bool cmp(student& a,student& b)
{
    if(a.sum!=b.sum) return a.sum>b.sum;
    else if(a.ge!=b.ge) return a.ge>b.ge;
}
bool cmp1(student& a,student& b)
{
    return a.id<b.id;
}
int main()
{
    int n,m,k,temp;
    int quota[101];
    vector<student> p[101];
    scanf("%d %d %d",&n,&m,&k);
    for(int i=0;i<m;i++)
        scanf("%d",&quota[i]);
    for(int i=0;i<n;i++)
    {
        s[i].id=i;
        scanf("%d %d",&s[i].ge,&temp);
        s[i].sum=s[i].ge+temp;
        for(int j=0;j<k;j++)
        {
            scanf("%d",&temp);
            s[i].pre.push_back(temp);
        }       
    }
    sort(s,s+n,cmp);
    s[0].rank=0;
    for(int i=0;i<n;i++)
    {
        if(s[i+1].sum==s[i].sum&&s[i+1].ge==s[i].ge)
            s[i+1].rank=s[i].rank;
        else
            s[i+1].rank=i+1;
    }
    for(int i=0;i<n;i++)
    {
        vector<int>::iterator it=s[i].pre.begin();
        while(it!=s[i].pre.end())
        {
            if(quota[*it]!=0)
            {
                p[*it].push_back(s[i]);
                quota[*it]--;break;
            }
            else
            {
                vector<student>::iterator it1=p[*it].end()-1;
                if(it1->rank==s[i].rank)
                { p[*it].push_back(s[i]);break;}
            }
            it++;
        }
    }
    for(int i=0;i<m;i++)
    {
        vector<student>::iterator it=p[i].begin();
        if(p[i].size()!=0)
        {
            sort(p[i].begin(),p[i].end(),cmp1);
            while(it!=p[i].end())
            {
                printf("%d",it->id);
                if(it!=p[i].end()-1)
                    printf(" ");
                it++;
            }
            printf("\n");
        }
        else
             printf("\n");
    }
    return 0;
}
  • 写回答

10条回答 默认 最新

  • 蒟蒻一枚 2021-01-15 17:21
    关注

    是不是s[0].rank应该等于1?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?