zoukankan      html  css  js  c++  java
  • PAT 1080

    排序题目,搞混了一件事情,那就是,排序结束之后顺序是变的啊亲... 很丑地解决了问题,其实应该对每一个学校维护一个last applicant比较,不过能过就行了

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 struct Applicant{
     8     int ge;
     9     int gi;
    10     int score;
    11 
    12     int idx;
    13 
    14     vector<int> apply_school;
    15 };
    16 
    17 struct sort_op{
    18     bool operator()(Applicant a1, Applicant a2){
    19         if (a1.score != a2.score)
    20             return (a1.score > a2.score);
    21         return (a1.ge > a2.ge);
    22     }
    23 };
    24 
    25 int main(){
    26     int N, M, K;
    27     cin >> N >> M >> K;
    28 
    29     vector<Applicant> applicants(N);
    30     vector<vector<int> > school_res(M);
    31     vector<int> school_quato(M);
    32 
    33     for (int i = 0; i < M; i++){
    34         int cnt;
    35         cin >> cnt;
    36         school_quato[i] = cnt;
    37     }
    38 
    39     for (int i = 0; i < N; i++){
    40         int ge, gi, idx;
    41         cin >> ge >> gi;
    42 
    43         applicants[i].ge = ge;
    44         applicants[i].gi = gi;
    45         applicants[i].score = ge + gi;
    46         applicants[i].idx = i;
    47 
    48         for (int j = 0; j < K; j++){
    49             cin >> idx;
    50             applicants[i].apply_school.push_back(idx);
    51         }
    52     }
    53 
    54     vector<Applicant> bck_up = applicants;
    55     sort(applicants.begin(), applicants.end(), sort_op());
    56 
    57     for (int i = 0; i < N; i++){
    58         for (int j = 0; j < K; j++){
    59             int school_idx = applicants[i].apply_school[j];
    60             if (school_quato[school_idx] > 0){
    61                 school_quato[school_idx]--;
    62                 school_res[school_idx].push_back(applicants[i].idx);
    63 
    64                 break;
    65             } else {
    66                 if (school_res[school_idx].size() == 0) continue;
    67                 int last = school_res[school_idx].back();
    68                 if (applicants[i].gi == bck_up[last].gi && applicants[i].ge == bck_up[last].ge){
    69                     school_res[school_idx].push_back(applicants[i].idx);
    70                     school_quato[school_idx]--;
    71                     break;
    72                 }
    73             }
    74         }
    75     }
    76 
    77     for (int i = 0; i < school_res.size(); i++){
    78         if (school_res[i].size() != 0){
    79             sort(school_res[i].begin(), school_res[i].end());
    80             cout << school_res[i][0];
    81 
    82             for (int j = 1; j < school_res[i].size(); j++)
    83                 cout << " " << school_res[i][j];
    84         }
    85 
    86         cout << endl;
    87     }
    88 
    89     return 0;
    90 }
  • 相关阅读:
    数据库之小问题
    网络基础
    react-fiber 解析
    【like-react】手写一个类似 react 的框架
    istat menus 序列号
    Git学习
    JavaScript设计模式与开发实践【第一部分】
    javascript 原生bind方法实现
    requirejs 学习
    mac 安装maven+eclipse
  • 原文地址:https://www.cnblogs.com/EpisodeXI/p/4082381.html
Copyright © 2011-2022 走看看