• 招聘策略



    /*
    题目 第一行整数表示招聘部门个数deptNum, 1 <= deptNum <= 10
    随后deptNum 行依次表示每个部门的要求,记录于deptDemands数组中,
    deptDemands[i] 表示变化为i的部门的目标人数 机考最低分 技面最低分,目标人数范围【1,200】
    最低分范围 【100, 150】
    接下来一行的整数表示应聘着数量 candidateNum, 1 <= candidateNum <= 10000
    随后candidateNum 行依次表示每个应聘者的信息,记录于数组 candidateAbilities 中 candidateAbilities[j]
    表示编号为j的应聘者的机考分数 技面分数, 机考和技面分数取值范围为【100,200】
    输出
    按部门编号从小到大,每行输出一个部门所录取人员的编号;若没有录取人员,输出空序列[]
    输入
    2
    2 130 120
    1 150 150
    6
    150 100
    160 190
    150 200
    200 190
    160 190
    160 190
    输出
    2 1 4
    3
    解释
    招聘录取过程如下
    第一轮 按部门编号从小到大,部门0 先选人 ,按选人规则优先录取应聘者2,然后是部门1 选人,优先录取应聘者3
    部门1招满,退出轮询
    第二轮 部门0 选人,应聘者1,4,5的能力值相同,录取编号小的应聘者1
    两轮后,部门0和部门1都达到人数目标,完全常规录取
    补录: 部门0先选人,应聘者4,5 与此前最后录取的1的能力相同,按规则补录一人 应聘者4后结束招聘,然后部门1补录,没有人与
    此前最后补录的应聘者3具备相同的能力值

    样例2
    输入
    2
    2 100 150
    1 150 100
    2
    100 120
    150 100
    输出
    【】
    【1】
    解释
    两个应聘者都不满足部门0的要求,因此部门0未录取
    应聘者1满足部门1的要求,因此部门1录取应聘者1

    样例3
    输入
    3
    1 100 100
    1 100 120
    1 100 150
    5
    100 200
    100 200
    100 200
    100 200
    100 200
    100 200
    输出
    【0 3】
    【1 4】
    【2】
    解释
    常规录取阶段, 三个部门分别录取应聘者 0,1,2
    补录阶段,部门0先选人,补录了应聘者3,剩下应聘者4,满足部门1和部门2的补录条件,但是部门1先选人

    * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
    * Description: 上机编程认证
    * Note: 缺省代码仅供参考,可自行决定使用、修改或删除
    * 只能import Go标准库
    */
    package main

    import (
    "bufio"
    "fmt"
    "io"
    "os"
    "strconv"
    "strings"
    )

    type deptDemand struct {
    deptId int // 部门编号
    employNum int // 招聘目标
    progmThd int // 机考门槛值
    techThd int // 技面门槛值
    }

    type candidate struct {
    peopleId int // 应聘者编号
    progmGrade int // 机试分数
    techGrade int // 技面分数
    }

    // 待实现函数,在此函数中填入答题代码
    func getRecruitmentResult(deptDemands []deptDemand, candidateAbilities []candidate) [][]int {
    return [][]int{}
    }

    func main() {
    reader := bufio.NewReader(os.Stdin)
    deptNum := readInputInt(reader)
    deptDemands := readDeptDemandsList(reader, deptNum) // 每个部门的要求
    candidateNum := readInputInt(reader)
    candidateAbilities := readCandidateList(reader, candidateNum) // 应聘者的信息
    result := getRecruitmentResult(deptDemands, candidateAbilities)
    for _, val := range result {
    fmt.Println(fmt.Sprint(val))
    }
    }

    func readInputInt(reader *bufio.Reader) int {
    var num int
    if _, err := fmt.Fscanf(reader, "%d\n", &num); err != nil {
    fmt.Println(err.Error())
    return 0
    }
    return num
    }

    func readDeptDemandsList(reader *bufio.Reader, num int) []deptDemand {
    deptDemands := make([]deptDemand, num)
    for i := 0; i < num; i++ {
    lineBuf, err := reader.ReadString('\n')
    if err != nil && err != io.EOF {
    fmt.Println(err.Error())
    return nil
    }
    lineBuf = strings.TrimRight(lineBuf, "\r\n")
    lineBuf = strings.TrimSpace(lineBuf)
    intNums := map2IntArray(lineBuf, " ")
    if len(intNums) != 3 {
    fmt.Println("input is error")
    return nil
    }
    deptDemands[i] = deptDemand{deptId: i, employNum: intNums[0], progmThd: intNums[1], techThd: intNums[2]}
    }
    return deptDemands
    }

    func readCandidateList(reader *bufio.Reader, num int) []candidate {
    candidateAbilities := make([]candidate, num)
    for i := 0; i < num; i++ {
    lineBuf, err := reader.ReadString('\n')
    if err != nil && err != io.EOF {
    fmt.Println(err.Error())
    return nil
    }
    lineBuf = strings.TrimRight(lineBuf, "\r\n")
    lineBuf = strings.TrimSpace(lineBuf)
    intNums := map2IntArray(lineBuf, " ")
    if len(intNums) != 2 {
    fmt.Println("input is error")
    return nil
    }
    candidateAbilities[i] = candidate{peopleId: i, progmGrade: intNums[0], techGrade: intNums[1]}
    }
    return candidateAbilities
    }

    func map2IntArray(str string, dem string) []int {
    tempArray := strings.Split(str, dem)
    result := make([]int, len(tempArray))
    for index, value := range tempArray {
    value = strings.TrimSpace(value)
    intVal, err := strconv.Atoi(value)
    if err == nil {
    result[index] = intVal
    }
    }
    return result
    }
  • 相关阅读:
    div 垂直居中的方法
    vs code添加到鼠标右键
    win10系统迁移到新的硬盘
    使用layui iframe弹层,各弹层之前的传值问题
    layui js动态添加的面板不能折叠
    Nginx系列6:对称加密与非对称加密各自的应用场景
    Nginx系列5:从网络原理来看SSL安全协议
    Nginx系列0:Nginx学习历程
    加扰与加密&解扰与解密
    微信小程序学习过程
  • 原文地址:https://www.cnblogs.com/gongxianjin/p/16755899.html
Copyright © 2020-2023  润新知