首页 > 编程语言 >【PAT_Python解】1115 裁判机

【PAT_Python解】1115 裁判机

时间:2024-11-10 09:46:07浏览次数:7  
标签:PAT sub Python res sys num 1115 numbers passed

原题链接:PTA | 程序设计类实验辅助教学平台

Tips:以下Python代码仅个人理解,非最优算法,仅供参考!多学习其他大佬的AC代码!

测试点5:passd 有9994个不同的有效数值

测试点6:is_given 有157386个不同的差值

AC代码:

import sys

def is_pass(num, is_given, passed_numbers, passed_end):
    # 如果 num 已经被拿过,直接返回 False
    if is_given[num]:
        return False
    # 遍历已经通过的数字,检查是否满足条件
    for i in range(passed_end):
        if num < passed_numbers[i] and is_given[passed_numbers[i] - num]:
            return True
        elif num > passed_numbers[i] and is_given[passed_numbers[i] + num]:
            return True
    return False

def main():
    # 给的数值肯定就直接1w和16w,或者20w,这里是为了看看到底有多少
    passed_numbers = [0] * 9994     # 有效数值数量
    is_given = [False] * 157386     # 不同差值数量

    # 读取输入
    passed_numbers[0], passed_numbers[1] = map(int, sys.stdin.readline().split())
    N, M = map(int, sys.stdin.readline().split())

    # 将初始数字标记为已经通过
    is_given[passed_numbers[0]] = True
    is_given[passed_numbers[1]] = True

    # 创建玩家列表
    players = []
    for _ in range(N):
        numbers = list(map(int, sys.stdin.readline().split()))
        players.append({'numbers': numbers, 'isOut': False})

    passed_end = 2  # 已通过的数字个数

    # 游戏过程
    for round_index in range(M):
        for player_index in range(N):
            if players[player_index]['isOut']:
                continue
            current_number = players[player_index]['numbers'][round_index]
            # 检查是否能够通过
            if is_pass(current_number, is_given, passed_numbers, passed_end):
                # 标记当前数字为已通过
                is_given[current_number] = True
                passed_numbers[passed_end] = current_number
                passed_end += 1
            else:
                # 玩家被淘汰
                players[player_index]['isOut'] = True
                sys.stdout.write(f"Round #{round_index + 1}: {player_index + 1} is out.\n")

    # 检查赢家
    winners = [i + 1 for i in range(N) if not players[i]['isOut']]
    if winners:
        sys.stdout.write(f"Winner(s): {' '.join(map(str, winners))}")
    else:
        sys.stdout.write("No winner.")

if __name__ == "__main__":
    main()

仅测试点5超时代码:

import sys

def update_res(valid_nums, sub_res, new_num):
    # 增量更新过测试点6,只为新添加的 num 计算绝对差
    for num in valid_nums:
        sub = abs(new_num - num)
        if sub not in sub_res:
            sub_res.add(sub)

def main():
    init1, init2 = map(int, sys.stdin.readline().split())
    valid_nums = {init1, init2}
    sub_res = set()
    update_res(valid_nums, sub_res, init1)
    update_res(valid_nums, sub_res, init2)

    n, m = map(int, sys.stdin.readline().split())
    ans = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
    
    winners = set(range(1, n + 1))
    for round in range(m):
        for man in range(n):
            num = ans[man][round]
            if not winners:
                sys.stdout.write('No winner.')
                return
            if man + 1 in winners:
                if num not in valid_nums and num in sub_res:
                    valid_nums.add(num)
                    update_res(valid_nums, sub_res, num)  # 增量更新
                else:
                    winners.remove(man + 1)
                    sys.stdout.write(f'Round #{round + 1}: {man + 1} is out.\n')
    
    if winners:
        res = ' '.join(map(str, winners))
        sys.stdout.write(f'Winner(s): {res}')
    else:
        sys.stdout.write('No winner.')

if __name__ == "__main__":
    main()

标签:PAT,sub,Python,res,sys,num,1115,numbers,passed
From: https://blog.csdn.net/m0_56677113/article/details/142984111

相关文章

  • 计算机毕业设计Python+大模型动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • 计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • jsonargparse python cli 开发库
    jsonargparse是一个pythoncli库,尽管不如其他库火(click)目前Lightningcli就使用了此库包含的特性自动创建cli类似Fire,typer,Clize以及Tyro支持类型校验支持通过配置文件或者环境变量的配置解析(集成confuse,configargparse,dynaconf,omegaconf)dataclass支持说明jsonargpa......
  • 华为OD机试2024年E卷-MVP争夺战[100分]( Java | Python3 | C++ | C语言 | JsNode | Go
    题目描述在星球争霸篮球赛对抗赛中,最大的宇宙战队希望每个人都能拿到MVP,MVP的条件是单场最高分得分获得者。可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场,并且让所有得分的选手得分都相同,然而比赛过程中的每1分钟的得分都只能由某一个人包揽。输入描述输入第一行......
  • 华为OD机试2024年E卷-AI识别面板[100分]( Java | Python3 | C++ | C语言 | JsNode | Go
    题目描述AI识别到面板上有N(1≤N≤100)个指示灯,灯大小一样,任意两个之间无重叠。由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1,右下角x2,y2),请输出先行后列排序的指示灯的编号,排序规则:每次在尚未排序的灯中挑选最高的......
  • 基于大数据 Python 作业管理系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • python+flask计算机毕业设计高校疫情学生管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高校疫情学生管理系统的研究,现有研究主要集中在学校整体管理层面,专门针对疫情期间高校学生管理系统的研究较少。在国内外,很多高校......
  • Python--案例练习print(x>=y and ch < ‘b‘ and y)
    Python3运行x=23y=1ch='B'print(x>=yandch<'b'andy)解释:在表达式 x>=yandch<'b'andy 中:x>=y 是 True,因为23大于等于1。ch<'b' 是 True,因为'B'在ASCII表中比'b'小('B'......
  • 基于大数据 Python 房地产数据分析系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • gigapath部署以及微调全过程
    0.0什么是gigapathgigapath是一个由微软开发的数字病理学全玻片基础模型,用于从高分辨率图像(如病理切片图像)中提取和处理信息的深度学习模型架构。图中分为abc三个部分a首先输入一张高清的病理图像,我们将它拆分成256*256的图像切片,从而可以逐块处理。每个图像块会被输入到一......