1. 程式人生 > 實用技巧 >PAT(Basic Level) Practice : 1015 德才論 (25分)

PAT(Basic Level) Practice : 1015 德才論 (25分)

1015 德才論 (25分)

重點

執行超時問題:
1.使用scanf和printf輸入輸出
2.sort使用algorithm自帶的,配合vector使用,不要自己寫
3.**在輸入的時候直接進行篩選操作,而不是把所有輸入資料儲存完,再一步步操作,這樣會導致3個測試點超時。 **
4.用class或者struct進行封裝,不要使用vector<vectror<> >。

程式碼

#include <iostream>
#include"stdlib.h"
#include <vector>
#include <cstdio>
#include <algorithm>
#include <sstream>
using namespace std;

class student{
public:
    int num1,num2,num3;
};


bool compare(student stu1, student stu2)
{
    if((stu1.num2+stu1.num3)!=(stu2.num2+stu2.num3))
        return (stu1.num2+stu1.num3)>(stu2.num2+stu2.num3);
    else if(stu1.num2!=stu2.num2)
        return stu1.num2>stu2.num2;
    else
        return stu1.num1<stu2.num1;
}

void print_inf(vector<student > Stu)
{
    for(vector<student >::iterator it=Stu.begin();it!=Stu.end();it++)
    {
        printf("%d %d %d\n",(*it).num1,(*it).num2,(*it).num3);
    }
}
int main()
{

    int Num,Low,High;
    cin>>Num>>Low>>High;

    vector<student > Stus;
    vector<student > Stus1,Stus2,Stus3,Stus4;
    int sum=0;
    for(int i=0;i<Num;i++)
    {
        student stu;
        scanf("%d%d%d",&stu.num1,&stu.num2,&stu.num3);

        if(stu.num2>=Low&& stu.num3>=Low)
        {
            sum++;
            if(stu.num2>=High&&stu.num3>=High)
                Stus1.push_back(stu);
            else if(stu.num2>=High&&stu.num3<High)
                Stus2.push_back(stu);
            else if(stu.num2<High&&stu.num3<High&&stu.num2>=stu.num3)
                Stus3.push_back(stu);
            else
                Stus4.push_back(stu);
        }


    }

    cout<<sum<<endl;


    sort(Stus1.begin(),Stus1.end(),compare);
    sort(Stus2.begin(),Stus2.end(),compare);
    sort(Stus3.begin(),Stus3.end(),compare);
    sort(Stus4.begin(),Stus4.end(),compare);

    print_inf(Stus1);
    print_inf(Stus2);
    print_inf(Stus3);
    print_inf(Stus4);

    //cout<<"1"<<endl;

    return 0;
}