PAT 乙级 1015 题解 (Basic Level) Practice

版权声明:本文为博主原创文章,转载请说明出处。 https://blog.csdn.net/qq278672818/article/details/86320589

一开始用C++的STL超时,又换成了C语言

#include<stdio.h>
#include<stdlib.h>
struct stu
{
    int num;
    int de;
    int cai;
};

int comp(const void *ss1,const void *ss2)
{

    const struct stu * s1 = (const struct stu *)ss1;
    const struct stu * s2 = (const struct stu *)ss2;
    int zong1 = s1->de+s1->cai;
    int zong2 = s2->de+s2->cai;
    if( zong1!= zong2)
        return zong1<zong2;
    if(s1->de!=s2->de)
        return s1->de<s2->de;
    return s1->num>s2->num;
}
int main()
{
    int N,L,H;
    scanf("%d %d %d",&N,&L,&H);
    struct stu v[N];

    int i,j;

    for(i=0,j=0;i<N;++i)
    {
        stu s;
        scanf("%d %d %d",&s.num,&s.de,&s.cai);
        if(s.de<L || s.cai<L)
            continue;
        v[j++]=s;
    }
    struct stu v1[j];
    struct stu v2[j];
    struct stu v3[j];
    struct stu v4[j];
    int j1=0,j2=0,j3=0,j4=0;
    for(i=0;i<j;++i)
    {
        if(v[i].de>=H && v[i].cai>=H)
        {
            v1[j1++]=v[i];
            continue;
        }
        if(v[i].de>=H)
        {
            v2[j2++]=v[i];
            continue;
        }
        if(v[i].de>= v[i].cai)
        {
            v3[j3++]=v[i];
            continue;
        }
        v4[j4++]=v[i];
    }
    qsort(v1,j1,sizeof(struct stu),comp);
    qsort(v2,j2,sizeof(struct stu),comp);
    qsort(v3,j3,sizeof(struct stu),comp);
    qsort(v4,j4,sizeof(struct stu),comp);
    printf("%d\n",j);

    for(i=0;i<j1;++i)
        printf("%d %d %d\n",v1[i].num,v1[i].de,v1[i].cai);
    for(i=0;i<j2;++i)
        printf("%d %d %d\n",v2[i].num,v2[i].de,v2[i].cai);
    for(i=0;i<j3;++i)
        printf("%d %d %d\n",v3[i].num,v3[i].de,v3[i].cai);
    for(i=0;i<j4;++i)
        printf("%d %d %d\n",v4[i].num,v4[i].de,v4[i].cai);
    return 0;
}

下面是超时的代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct stu
{
    int num;
    int de;
    int cai;
};

bool operator<(const stu &s1,const stu &s2)
{
    int zong1 = s1.de+s1.cai;
    int zong2 = s2.de+s2.cai;
    if( zong1!= zong2)
        return zong1>zong2;
    if(s1.de!=s2.de)
        return s1.de>s2.de;
    return s1.num<s2.num;
}
int main()
{
    int N,L,H;
    cin>>N>>L>>H;
    vector<stu> v;

    int i;

    for(i=0;i<N;++i)
    {
        stu s;
        cin>>s.num>>s.de>>s.cai;
        if(s.de<L || s.cai<L)
            continue;
        v.push_back(s);
    }
    vector<stu> v1;
    vector<stu> v2;
    vector<stu> v3;
    vector<stu> v4;
    for(i=0;i<v.size();++i)
    {
        if(v[i].de>=H && v[i].cai>=H)
        {
            v1.push_back(v[i]);
            continue;
        }
        if(v[i].de>=H)
        {
            v2.push_back(v[i]);
            continue;
        }
        if(v[i].de>= v[i].cai)
        {
            v3.push_back(v[i]);
            continue;
        }
        v4.push_back(v[i]);
    }
    sort(v1.begin(),v1.end());
    sort(v2.begin(),v2.end());
    sort(v3.begin(),v3.end());
    sort(v4.begin(),v4.end());
    cout<<v.size()<<endl;

    for(i=0;i<v1.size();++i)
        cout<<v1[i].num<<" "<<v1[i].de<<" "<<v1[i].cai<<endl;
    for(i=0;i<v2.size();++i)
        cout<<v2[i].num<<" "<<v2[i].de<<" "<<v2[i].cai<<endl;
    for(i=0;i<v3.size();++i)
        cout<<v3[i].num<<" "<<v3[i].de<<" "<<v3[i].cai<<endl;
    for(i=0;i<v4.size();++i)
        cout<<v4[i].num<<" "<<v4[i].de<<" "<<v4[i].cai<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq278672818/article/details/86320589