1. 程式人生 > >【PAT】(乙級)1015. 德才論 (25)

【PAT】(乙級)1015. 德才論 (25)

  • 時間限制 200 ms
  • 記憶體限制 65536 kB
  • 程式碼長度限制 8000 B
  • 判題程式 Standard
  • 作者 CHEN, Li

一、題目

宋代史學家司馬光在《資治通鑑》中有一段著名的“德才論”:

“是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。”

現給出一批考生的德才分數,請根據司馬光的理論給出錄取排名。

輸入格式:

輸入第1行給出3個正整數,分別為:N(<=105),即考生總數;L(>=60),為錄取最低分數線,即德分和才分均不低於L的考生才有資格被考慮錄取;H(<100),為優先錄取線——德分和才分均不低於此線的被定義為“才德全盡”,此類考生按德才總分從高到低排序;才分不到但德分到線的一類考生屬於“德勝才”,也按總分排序,但排在第一類考生之後;德才分均低於H,但是德分不低於才分的考生屬於“才德兼亡”但尚有“德勝才”者,按總分排序,但排在第二類考生之後;其他達到最低線L的考生也按總分排序,但排在第三類考生之後。

隨後N行,每行給出一位考生的資訊,包括:准考證號、德分、才分,其中准考證號為8位整數,德才分為區間[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

二、Tips

Tips1: 自定義資料型別排序、自定義cmp函式運算子過載vector
Tips2: 注意不低於(>=)和高於(>)的區別,臨界條件要看清.

注: Java程式碼超時。(通過率:33.3%;超時:50%;格式錯誤:16.7%)。這個格式錯誤也是醉了。完全看不出來哪裡不一樣了。

三、程式碼

//注意不低於(>=)和高於(>)的區別,臨界條件要看清
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
int N,L,H;
class stu{
public:
    int num;
    int d;
    int c;
    stu(){
        num=0;
        d=0;
        c=0;
    }
    stu(int _num,int _d,int _c){
        num=_num;
        d=_d;
        c=_c;
    }
    int getType(){
        if (d >= H && c >= H) {
            return 1;
        } else if (d >= H && c < H && c >= L) {
            return 2;
        } else if (d < H && d >= L && c < H && c >= L && d >= c) {
            return 3;
        } else {
            return 4;
        }
    }
    bool operator>(stu &s){
        if(getType()!=s.getType()){
            return getType()<s.getType();
        }else{
            if(c+d!=s.c+s.d){
                return c+d>s.c+s.d;
            }else{
                if(d!=s.d){
                    return d>s.d;
                }else{
                    return num<s.num;
                }
            }
        }
    }
};
bool cmp(stu s1,  stu s2){
    return s1>s2;
}
int main(){
    stu s1(101,80,80),s2(102,80,80);
    int i,count=0;
    scanf("%d %d %d",&N,&L,&H);
    vector<stu> stus;
    for(i=0;i<N;i++){
        int num,d,c;
        scanf("%d %d %d",&num,&d,&c);
        if(d<L||c<L){
            continue;
        }
        stu s(num,d,c);
        count++;
        stus.push_back(s);
    }
    sort(stus.begin(),stus.end(), cmp);
    cout<<count<<endl;
    for(int i=0;i<count;i++){
        printf("%d %d %d\n",stus[i].num,stus[i].d,stus[i].c);
    }
    return 0;
}

注:下方Java程式碼未AC。僅做學習之用。

import java.util.*;

/**
 * 1015. 德才論 (25)
 * https://www.patest.cn/contests/pat-b-practise/1015 超時 通過率:33%
 * Created by Relish on 2016/8/7.
 */
public class _1015 {
    private static int N, L, H;

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        N = cin.nextInt();//num of students
        L = cin.nextInt();//lowest score
        H = cin.nextInt();//priority line
        List<Student> students = new ArrayList<Student>();
        for (int i = 0; i < N; i++) {
            Student student = new Student(cin.nextInt(), cin.nextInt(), cin.nextInt());
            if (student.beConsidered()) {
                students.add(student);
            }
        }
        Collections.sort(students);
        System.out.println(students.size());
        System.out.println(Arrays.toString(students.toArray()).replaceAll("\\[|\\]", "").replace(", ", "\n"));
    }

    static class Student implements Comparable<Student> {
        int num;
        int d;
        int c;

        Student(int num, int d, int c) {
            this.num = num;
            this.d = d;
            this.c = c;
        }

        @Override
        public int compareTo(Student o) {
            if (getType() < o.getType()) {
                return -1;
            } else if (getType() == o.getType()) {
                if (c + d > o.c + o.d) {
                    return -1;
                } else if (c + d == o.c + o.d) {
                    if (d > o.d) {
                        return -1;
                    } else if (d == o.d) {
                        return num > o.num ? 1 : -1;//never equals
                    } else {
                        return 1;
                    }
                } else {
                    return 1;
                }
            } else {
                return 1;
            }
        }

        int getType() {
            if (d >= H && c >= H) {
                return 1;
            } else if (d >= H && c < H && c >= L) {
                return 2;
            } else if (d < H && d >= L && c < H && c >= L && d >= c) {
                return 3;
            } else {
                return 4;
            }
        }

        boolean beConsidered() {
            return c >= L && d >= L;
        }

        @Override
        public String toString() {
            return num + " " + d + " " + c;
        }
    }
}

相關推薦

PAT乙級1015. 德才 (25)

時間限制 200 ms 記憶體限制 65536 kB 程式碼長度限制 8000 B 判題程式 Standard 作者 CHEN, Li 一、題目 宋代史學家司馬光在《資治通鑑》中有一段著名的“德才論”: “是故才德全盡謂之聖人,才德兼亡謂之愚

PAT乙級1011. A+B和C (15)

時間限制 100 ms 記憶體限制 65536 kB 程式碼長度限制 8000 B 判題程式 Standard 作者 HOU, Qiming 一、題目 給定區間[-231, 231]內的3個整數A、B和C,請判斷A+B是否大於C。 輸入格式: 輸

PAT乙級1015. 德才

宋代史學家司馬光在《資治通鑑》中有一段著名的“德才論”:“是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。” 現給出一批考生的德才分數,請根據司馬光的理論給出錄取排名。 輸入格式: 輸入第1行給出3個正整數,分別為:

PATB1054 求平均值 (20)

『題目』 本題的基本要求非常簡單:給定N個實數,計算它們的平均值。但複雜的是有些輸入資料可能是非法的。一個“合法”的輸入是[-1000,1000]區間內的實數,並且最多精確到小數點後2位。當你計算平均值的時候,不能把那些非法的資料算在內。 輸入格式: 輸入第一行給出正整

PAT (Basic Level) Practice 中文 1015 德才 25 C++快速排序思想

1015 德才論 (25 分) 宋代史學家司馬光在《資治通鑑》中有一段著名的“德才論”:“是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。” 現給出一批考生的德才分數,請根據司馬光的理論給出錄取排

PATB1052 賣個萌 (20)

『題目』 萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符號是按下列格式輸出的: [左手]([左眼][口][右眼])[右手] 現給出可選用的符號集合,請你按使用者的要求輸出表情。 輸入格式: 輸入首先在前三行順序對應給出手、

PATB1040 有幾個PAT

『題目』 字串APPAPT中包含了兩個單詞“PAT”,其中第一個PAT是第2位(P),第4位(A),第6位(T);第二個PAT是第3位(P),第4位(A),第6位(T)。 現給定字串,問一共可以形成多少個PAT? 輸入格式: 輸入只有一行,包含一個字串,長度不超過10

PAT (Basic Level) Practise 中文1015. 德才3種方法

宋代史學家司馬光在《資治通鑑》中有一段著名的“德才論”:“是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。” 現給出一批考生的德才分數,請根據司馬光的理論給出錄取排名。 輸入格式: 輸入第1行給出3個正整數,分別為:

PAT1015 德才 (25)25

clu 包括 準考證 printf 理論 代碼 print spa fin  1015 德才論 (25)(25 分) 宋代史學家司馬光在《資治通鑒》中有一段著名的“德才論”:“是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,茍不得聖人,君

PAT Basic 1015. 德才 (25)C語言實現

, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目宋代史學家司馬光在《資治通鑑》中有一段著名的“德才論”:“是故才德全盡謂之聖人

[轉]Web APi之認證Authentication兩種實現方式十三

用戶數 ted das 客戶 元素 基礎 目標 開始 net 本文轉自:http://www.cnblogs.com/CreateMyself/p/4857799.html 前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如

Java_SSMEclipse中通過maven引入jar包

osc ati eight wid -- stat ack ips 技術 這篇博文我們介紹一下如何通過eclipse配置setting並引入jar包 (1)eclipse:Window--Preferences--Maven--User Setting 全部完成

Web APi之認證Authentication兩種實現方式十三

基於web 推薦 zed {0} scheme sage https 函數 ges 原文:Web APi之認證(Authentication)兩種實現方式【二】(十三)前言 上一節我們詳細講解了認證及其基本信息,這一節我們通過兩種不同方式來實現認證,並且分析如何合理的利用

Headmaster's Headache UVa10817DP

employ ace class CA ted same ring form rain 題目: The headmaster of Spring Field School is considering employing some new teachers for cert

PyQt502添加組件:圖標、按鈕

5.1 connect pyqt 任務 模塊 內置 圖標 utf block 環境說明: 平臺:WIN10(教育版) 環境:Anaconda5.2(Python3.6.6) IDE:Pacharm2018.2.1(專業版) PyQt5:5.11.2 任務目標一:添加圖標

PyQt502改變窗體的位置和大小

blank font .com python core www. geo target elf 特別說明 為了直接展示本篇的重點,往期內容將不再寫入代碼中,讀者可按需自行編碼組合 為了更好的展示效果,代碼段將以圖片的形式上傳,若想復制代碼可移步筆者的Github 為了便於

PyQt506添加組件:按鈕,並設置位置和大小

github 輸出 技術 代碼 qt5 上傳 評論 教育版 www 特別說明 為了直接展示本篇的重點,往期內容將不再寫入代碼中,讀者可按需自行編碼組合 為了更好的展示效果,代碼段將以圖片的形式上傳,若想復制代碼可移步筆者的Github 為了便於學習,每篇只解決一個小問題,

TensorFlow01線性回歸

lob 超參數 教育版 ini src ont numpy mat font 特別說明 代碼地址:Github 環境說明 平臺:WIN10(教育版) 環境:Anaconda5.2(Python3.6.6) IDE:Pacharm2018.2.3(專業版) Tensor

Django2Django模塊創建應用程序

網站 sca tar 註意 運行 ESS etime tex efi 保持runserver還在運行,在manage.py相同的目錄下,新開一個終端窗口,激活虛擬環境,執行startapp命令 python manage.py startapp learn

Django3創建網頁:學習筆記主頁

nbsp 圖片 png 剛才 需要 ews namespace render esp 創建Django的過程通常為三個階段:定義URL,編寫視圖和編寫模板。 映射URL 當在瀏覽器中輸入URL時,現在默認會返回默認的Django網站,現在需要將主頁映射到項目&ldquo