PAT 1015Graduate Admission (30)

来源:互联网 发布:淘宝权重怎么提升 编辑:程序博客网 时间:2024/05/30 04:30

这道题谁帮我找出那个bug,好想请那个人吃饭,有俩分没通过。

思路

  • 1.首先把俩个结构体的元素想好,比如多一个rank,感觉比较的话就方便很多。
  • 2.quota配额,囧….
  • 3.总的来说就是先排好序,然后看学校满没满以及lastrank取人就是了。

我出错的一些点

  • 1.难道不能用>?,<可以用,是sort默认是从小到大的原因吗?
  • 2.bool cmp(const …,const …),不加const报错。
  • 3.vector<…> name(n,…),这样声明n个比较方便。
  • 4.(int).size()这个是咋回事啊,有时候为啥不用这么些?

代码

#include <iostream>#include <vector>#include <math.h>#include<algorithm>using namespace std;//quota配额struct application_{    //多一个rank要方便很多    int id,GE,GI,total,rank ;    vector<int> choice;    application_() :id(-1), GE(0), GI(0), total(0), rank(-1), choice(0){};    application_(int x) :id(-1), GE(0), GI(0), total(0), rank(-1), choice(vector<int>(x, 0)){};    //难道不能用>?,<可以用    /*bool operator < ( application_ r) {        if (total < r.total)            return true;        else            return false;    }*/};//不加const报错bool cmp(const application_& a,const application_& b){    if (a.total > b.total)        return true;    else if (a.GE == b.GE&&a.total > b.total)        return true;    //else要写完    else return false;}struct school{    int quato;    int lastRank;    vector<int> student;    school() :quato(0), lastRank(0), student(0){};};int main(){    ios::sync_with_stdio(false);    int n, m, k;    cin >> n >> m >> k;    //这样声明感觉爽很多    vector<application_> students(n, application_(k));    vector<school> schools(m);    for (int i = 0; i < m; i++)    {        cin >> schools[i].quato;    }    for (int i = 0; i < n; i++)    {        cin >> students[i].GE >> students[i].GI;        students[i].id = i;        students[i].total = students[i].GE + students[i].GI;        for (int j = 0; j < k; j++)        {            cin >> students[i].choice[j];        }    }    sort(students.begin(), students.end(),cmp);    students[0].rank = 0;    for (int i = 1; i < n; i++)    {        if ( (students[i].total == students[i - 1].total&&students[i].GE == students[i - 1].GE))            students[i].rank = students[i-1].rank;        else            //students[i].rank = students[i-1].rank+1;            students[i].rank = i;    }    int ch_id;    for (int i = 0; i < n; i++)    {        for (int j = 0; j < k; j++)        {            ch_id = students[i].choice[j];            if (schools[ch_id].quato > 0||(schools[ch_id].quato==0&&schools[ch_id].lastRank==students[i].rank))            {                schools[ch_id].student.push_back(students[i].id);                if (schools[ch_id].quato > 0)                {                    schools[ch_id].quato--;                }                schools[ch_id].lastRank = students[i].rank;                //记得录取了就break。                break;            }        }    }    for (int i = 0; i < m; i++)    {        sort(schools[i].student.begin(), schools[i].student.end());        //注意(int).size()        for (int j = 0; j < (int)schools[i].student.size(); j++)        {            //cout << "j:" << j<<endl;            if (j == 0)                cout << schools[i].student[j];            else                cout <<  " " <<schools[i].student[j];        }        cout << endl;    }    /*for (int i = 0; i < n; i++)    {        cout << "id:" << students[i].id << " total:" << students[i].total << " GE:" << students[i].GE << " rank:" << students[i].rank << endl;    }*/    return 0;}
0 0
原创粉丝点击