PAT B1015A1062道徳的な理論(25)

タイトル説明
宋の歴史家司馬光は、有名な「道徳的な理論は、」「ミラー」であり、「愚か者の、Rubyは紳士のものだったことを実際に全体の高潔を行うには聖人のそれの発生、高潔と死、剛ない聖人を手術を取り、紳士で、その悪役だった人は、愚か者としてではなかっただけShengde悪役のこと。「
今の候補者が道徳的、スコアの数が与えられ、司馬光に応じてください。理論は、入場のランキングを提供します。
入力フォーマット
最初のラインの入力は、それぞれ、3つの正の整数を与える:N(≤10^ 5)、即ち、候補の総数、すなわちL(≥60)、候補に対する最低スコア、デCaifenポイントとしないL未満道徳的、そのような候補の合計に応じて、「実行する全高潔」として定義されているドイツの点と残念ながら、彼らは、この行の下にはない- H(<100)、優先入場線と候補は入場のために考慮の対象であります、道徳的なポイントは、Hよりも低かった。ポイントが順にリストされている。Caifenが、ライン候補に割り当てられていないデクラスは、スコアによってソートされた、「ルビーだけ」ですが、最初のカテゴリ候補の後ろドイツは、候補者を分割ではなく、残念ながら、彼らはよりも少ない「高潔と死、」しかし「は、Rubyは唯一の」整理が、候補者の第二のクラスの後に来た者がある、他の候補者も、プレスを最小線Lを満たします整理が、第三のカテゴリーの候補の背後にあります。
次いで、N行は、各行が被験者の情報、を含む与える:8ビットの整数であるデ点Caifenチケット番号、チケット番号を、整数内道徳区間[0、100]を分割しました。スペースで区切られた数字の間。
入力フォーマット
入力命令の順に列挙された規則に従って入力フォーマット候補の出力に応じて、第1ラインの出力は、候補数はMの最初の最小のスコアを与えられ達し、その後、M行、各行、候補。それらのデポイントに従って降順に、同一のうち特定の候補以上存在するとき、デポイントは、出力チケット番号の昇順に結びついている場合。
サンプル入力

14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60

サンプル出力

12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90

すべてのAC

#include <cstdio>
#include <cstring>
#include <algorithm>
const int maxn = 100010;
using namespace std;

struct People {
    int id;   //考生准考证号
    int D_score;    //考生德分
    int C_score;  //考生才分
    int S_score;    //考生总分
    int flag;   //等级
}people[maxn];

bool cmp(People a, People b) {
    if(a.flag != b.flag) return a.flag < b.flag; //类别小的在前
    else if(a.S_score != b.S_score) return a.S_score > b.S_score; //总分大的在前
    else if(a.S_score == b.S_score && a.D_score != b.D_score) return a.D_score > b.D_score; //德分大的在前
    else if(a.S_score == b.S_score && a.D_score == b.D_score) return a.id < b.id; ; //准考证小的在前
}

int main() {
    #ifdef ONLINE_JUDGE
    #else
        freopen("1.txt", "r", stdin);
    #endif // ONLINE_JUDGE
    int num, low_score, high_score, m; //考生总数, 录取最低分, 优先录取线, 及格人数
    scanf("%d%d%d", &num, &low_score, &high_score);
    m = num; //假设及格人数等于总人数
    if(num != 0) {
        for(int i = 0; i < num; i++) {
            scanf("%d%d%d", &people[i].id, &people[i].D_score, &people[i].C_score);
            people[i].S_score = people[i].D_score + people[i].C_score;
            if(people[i].D_score < low_score || people[i].C_score < low_score) {
                    people[i].flag = 5;
                    m--;//及格人数减1
            }
            else if(people[i].D_score >= high_score && people[i].C_score >= high_score) people[i].flag = 1;
            else if(people[i].D_score >= high_score && people[i].C_score < high_score) people[i].flag = 2;
            else if(people[i].D_score < high_score && people[i].C_score < high_score && people[i].D_score >= people[i].C_score) people[i].flag = 3;
            else people[i].flag = 4;
        }
        sort(people, people + num, cmp); //排序
        printf("%d\n", m);
        for(int i = 0; i < m; i++) {
            //printf("%s %d %d %d\n", people[i].id, people[i].D_score, people[i].C_score, people[i].flag);
            printf("%d %d %d\n", people[i].id, people[i].D_score, people[i].C_score);
        }
    } else {
        printf("");
        return 0;
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/isChenJY/p/11497721.html