ACM 的代码编码示例

news2024/12/25 0:16:26

写在最前面的

实践的顺序,

应该是先将基础的 数据结构题目类型给实现。

然后再开始尝试 实现对应类型的算法题目,如回溯算法, 贪心算法, 动态规划, 图论;

  1. 基础的数据结构, 推荐卡尔的:
    代码随想录:https://programmercarl.com/;

  2. 算法部分,卡尔的内容结合: https://labuladong.online/algo/home/; 两者在原理解释上结合来看;

  3. 计算机基础知识,
    操作系统、计算机网络、数据结构与算法、数据库、计算机组成原理, 基本
    踏实的学习应该是在大学本科, 后续可以自学, 参考 阿秀的笔记
    https://interviewguide.cn/notes/01-guide/web-guide-reading.html;

1. ACM 编程模式

在面试过程中,写代码时,
会出现ACM 的编程风格,即需要自己处理输入,输出,这里推荐参考:

  1. 牛客网的示例练习

  2. 卡尔网的 https://kamacoder.com/;

1.1 多行输入, 每行输入两个整数

import  sys

# 循环执行每行输入, 每行读入后,依次执行如下操作
for  line in  sys.stdin: 
    cur_input = line.split() # 
    out = int(cur_input[0])  + int(cur_input[1]) # 将列表中每个元素转换成整型;
    
    print(out)

在这里插入图片描述

  1. 首先我们从终端输入的每一行数据 被读入之后被视为字符类型,

  2. 每一行中,我们通过空格键来分隔各个数据, 在一行输入结束后,按下 enter 键, 读入之后被表示为换行符 \n ;

  3. line.split 会对当前行中的数据处理, 通过split函数将他们分隔多个数据存储到列表中, 且此时列表中的每个元素仍是 str 类型; 在split()的过程中,如果不指定特殊字符, 则默认通过使用空格符 来分隔;

for line in sys.stdin:

从标准输入读取:for 循环 for line in sys.stdin: 从标准输入中逐行读取输入,直到到达文件结尾 (EOF)。当输入源(例如来自终端的文件或用户输入)关闭时,可能会发生这种情况。在典型的使用场景中(例如在管道中使用脚本或从文件重定向脚本时),这允许脚本无限期地处理输入或直到输入流关闭。
line.split()
处理每一行输入:在循环内,每次处理每一行输入。 line.split() 方法将字符串 line 拆分为列表 cur_input ,其中每个元素都是一个子字符串(最初在输入中用空格分隔)。例如,如果输入行是“123 456”,则 cur_input 将是 ['123', '456']
 int(cur_input[0]) + int(cur_input[1]) :此表达式将 cur_input 的第一个和第二个元素转换为整数并对它们求和。结果不会打印或存储在变量 out 之外,这意味着将使用每个新输入行重新计算结果,并且先前的结果将被覆盖。

注意,其中默认使用的分隔符有如下:

Space (' ') 空格 ( ' ' ):表示单词或字符之间的常规空格字符。

Tab ('\t'):  制表符 ( '\t' ):表示制表符,通常用于文本对齐。

Newline ('\n'):换行符 ( '\n' ):在 Unix/Linux 系统中表示一行的结束。它将光标移动到下一行。


Carriage Return ('\r'):  回车符 ( '\r' ):在较旧的 Mac 系统中单独使用,在 Windows 系统中与换行符 ( '\r\n' ) 结合使用,表示行的结束。它将光标返回到行的开头。


Form Feed ('\f'):换页 ( '\f' ):不太常用,该字符在打印机中推进进纸或在文本文档的某些上下文中更改到新“页面”。

当不带任何参数的情况下调用 split() 时,它会将任何上述这些空白字符的序列视为单个分隔符,并且还会在拆分之前自动删除字符串中的任何前导和尾随空白。此行为对于解析输入(其中元素之间的间距量可能不同或使用不同的行结束约定)特别有用。

2.2 输入多行, 需要指定行号

此循环还从标准输入中逐一读取每一行,但它使用 enumerate() 函数跟踪每行的索引(行号):

import sys

for i, line in enumerate(sys.stdin):
    if i == 0:
        n = int(line)
    else:
        a = line.split()
        print(int(a[0]) + int(a[1]))

行为:与第一个循环类似,它迭代每一行直到 EOF,但 enumerate() 还提供了一个计数器 ( i ),默认从 0 开始,并随着每次迭代而递增。此 i 通常用作行号(从 0 开始,或者您可以通过向 enumerate() 提供开始参数来调整它)。

对于输入中行的位置相关的任务(例如,错误报告、必须被索引)。

2.3 输入多行,存在终止条件的

提供的代码片段使用了多个Python函数的组合( whilelistmapintinputsplit )来重复读取用户的输入,将输入拆分为多个部分,将这些部分转换为整数,并将它们存储在列表中。

while True:
    try: 
        cur_list = list( map(int,  input().split())  )
        a,  b = cur_list[0], cur_list[1]
        if a == 0 and b == 0: break
        print( a +b )
    except:
        break

以下是每个组件的详细说明以及它们如何协同工作.

while True:
目的:这是一个无限循环。它将无限期地继续执行其中的代码块,除非被break语句、错误或外部中断(如来自操作系统的终止信号)中断。

行为:它使循环无限运行,使脚本不断提示新输入并对其进行处理,直到明确停止。
input():
功能:该函数等待来自标准输入(通常是键盘)的用户输入。按下 Enter 键后, input() 将整行输入作为字符串读取。
.split()
功能:该方法将字符串拆分为一个列表,其中每个字符都是一个列表项。默认分隔符是任何空格,因此它根据空格、制表符等分隔输入。

map(int, input().split())
函数:map() 将函数应用于可迭代对象中的所有项目。这里, int 是应用的函数,因此 map(int, input().split()) 尝试将 input().split() 返回的列表中的每个项目从字符串转换为整数。
list(map(int, input().split()))
功能:由于 map() 返回一个map对象(它是一个迭代器),因此 list() 用于将这个迭代器转换为列表。为了在 Python 中轻松使用和访问整数作为列表结构,此步骤是必要的。

try, except 的组合

except: :这是一个捕获所有异常处理程序,这意味着它将拦截 try 块抛出的任何类型的异常。通常,最好指定异常类型(如 ValueError 、 IndexError 等),以避免捕获意外错误并掩盖错误。

break :如果 try 块中发生任何异常,则执行 except 块,打破循环并停止程序或退出循环。这可能是由于没有输入足够的数字(导致 IndexError )、输入非整数值(导致 ValueError )或其他不可预见的问题。

鲁棒性:通过防止程序因常见输入错误而崩溃,代码变得更加鲁棒。当遇到输入不足或非数字数据等问题时,它不会以错误消息终止,而是优雅地退出循环。

控制流:它们用于控制程序的流程,确保程序仅在正确的条件下继续运行,并在遇到可能导致运行时错误的问题时安全停止。

2.4 多行输入, 指定每行输入的个数

while True:

    try: 
        cur_list =  list( map(int, input().split()))
        num0  =  cur_list[0]
        out = -cur_list[0]

        if num0 == 0 : break
        for i in range (len(cur_list)):
            out += cur_list[i]
        
        print(out)
    
    except:
        break

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】vector的底层原理讲解及其实现

目录 一、认识vector底层结构 二、初始化vector的函数 构造函数拷贝构造赋值构造initializer_list构造迭代器区间构造 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 一、认识vector底层结构 STL库中实现vector其实是用三个指针来完成的&#x…

PY32F403系列单片机,32位M4内核MCU,主频最高144MHZ

PY32F403系列单片机是基于Arm Cortex-M4核的32位通用微控制器产品。内置的FPU和DSP功能支持浮点运算和全部DSP指令。通过平衡成本,性能,功耗来获得更好的用户体验。 PY32F403单片机典型工作频率可达144MHZ,内置高速存储器,丰富的…

sql注入之bool盲注

目录 盲注步骤 1、进入靶场 2、如下图所示输入?id1‘ 判断此时存在注入点 3、判断列数 ​编辑 4、开始盲注 普通的python脚本 代码思想 结果 二分查找python脚本 二分查找算法思想简介 二分查找与普通查找的主要差距 代码思想 代码 结果​编辑 下面以…

图像融合-下游任务(目标检测、实例分割、深度估计、局部区域细节放大)

下游任务: 采用目标检测、实例分割和深度估计的下游任务来验证图像融合结果质量。 文章目录 下游任务:1.目标检测2.实例分割3.深度估计局部细节放大工具Update1.目标检测 YOLOv8:https://github.com/ultralytics/ultralytics 步骤内容第一步下载项目到本地第二步安装READ…

文献阅读——中国农产品期货的正负价格泡沫(LPPLS)

Positive and negative price bubbles of Chinese agricultural commodity futures Fang, Ming, Yizhou Lin, and Chiu-Lan Chang. “Positive and negative price bubbles of Chinese agricultural commodity futures.” Economic Analysis and Policy 78 (2023): 456-471. 经…

以项目为中心打造企业卓越经营管理体系︱PMO大会

全国PMO专业人士年度盛会 广东林氏家居股份有限公司战略副总裁杨永柠先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“以项目为中心打造企业卓越经营管理体系”。大会将于6月29-30日在北京举办,敬请关注! 议题简要&…

WPS表格:使用vlookup函数解决乱序数据对应问题

我们常常会遇到两个表格的内容相同,但是顺序不一致的情况。并且这种顺序无关于简单的排序,而是一种业务性很强的复杂排序规则。下面我举个例子,使用VLOOKUP复制数据。 假设太阳系行星举办了一次卖萌比赛,由太阳妈妈决定谁是最萌的…

【JVM】ASM开发

认识ASM ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。 ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后能够改变类行为,分析类信息&#xff…

【Unity 鼠标输入检测】

Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入,允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法: 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…

JVM调优-调优原则和原理分析

1.写在前面 对于JVM调优这个话题,可能大部分程序员都听过这个名词。 但是绝大多数程序员,都没有真真实实去干过,都没有真实的实践过。也不懂得如何调优?不知道要调成怎么样? 那今天咋们就对这个话题来展开描述一下&…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git,本质上还是使用本地安装的Git软件,所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

kali linux2024.1版安装

1 基于 VMware 安装 Kali 系统 打开已经安装好的 VMware 程序,点击选项卡中的“主页”--》而后点击“创建新的虚拟机” 选择“典型(推荐)”,并点击“下一步” 客户机操作系统镜像选择:选择“稍后安装操作系统”,并点击“下一步”…

全新神经网络架构KAN——本文用于学习与探索

论文地址:https://arxiv.org/pdf/2404.19756 Github:GitHub - KindXiaoming/pykan: Kolmogorov Arnold Networks 文档说明:Welcome to Kolmogorov Arnold Network (KAN) documentation! — Kolmogorov Arnold Network documentation 本文仅…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测,2024.4.24,华为机试 🏩题目一描述:输入格式输出格式样例1样例2样例3数据范围解题思路一:dfs解题思路二:直接二分查找哇!解题思路三&am…

经典权限五张表功能实现

文章目录 用户模块(未使用框架)查询功能实现步骤代码 新增功能实现步骤代码 修改功能实现步骤代码实现 删除功能实现步骤代码实现 用户模块会了,其他两个模块与其类似 用户模块(未使用框架) 查询功能 这里将模糊查询和分页查询写在一起 实现步骤 前端&#xff1…

Linux下安装gmp6.2.1的详细操作(深度学习)

方式一:编译gmp GMP官方地址https://gmplib.org/ 1. 官网下载gmp安装包 2. 解压下载好的安装包 tar -zxvf gmp-6.2.1.tar.bz2 3. 进入解压后的文件夹 cd gmp-6.2.1 4. 指定安装路径进行安装 # /usr/local换成自己的安装路径 ./configure --prefix/usr/local 5. 编…

Excel快速填充序号的方法

Excel快速填充序号常用的方法。 方法一:填充前面序号后拖拽 特点: 能有规律的填充,排序的行数由拖拽的行数决定。 此方法填充的序号等效于手打的序号,删除一行后下一行不会自动更新排序。 步骤:输入两个初始序号&…

org.springframework.jdbc.BadSqlGrammarException

Cause: java.sql.SQLSyntaxErrorException: Table ‘web.emp’ doesn’t exist 产生原因:web表找不到,所以可能数据库配置错误 spring.datasource.urljdbc:mysql://localhost:3306/web02 更改完成后运行成功

windows@注册表介绍@注册表的查看和编辑操作

文章目录 abstractrefs注册表的主要组件包括根键极其缩写名称👺子键特性 查看注册表👺使用powershell查看路径下的子路径声明概念Get-ChildItem查看注册表路径下的项Set-Location进入注册表路径举例说明查看文件系统某个路径下的项查看某个注册表路径的项…