编程机试acm模式输入输出总结(Python)

与leetcode的核心代码模式不同,acm模式下需要自己编写输入与输出函数。

我用这个练习牛客网在线编程_算法笔面试篇_输入输出练习

记住:再刷这个的时候重心要在怎么把数据读取进来,不是处理数据的逻辑,要和逻辑部分解耦合

Python 的序列解包(unpacking): n,m = [3,4]

python 字符串反转的方法:切片 [::-1] 的意思是步长为 -1,从后往前取。

::切片的扩展语法,完整形式是:s[start : stop : step]

python 切片基础与高级用法一定要会

对字符串矩阵转置,则用zip(), zip(*matrix)会把矩阵按行展开

序列解包的两种用法:

# 序列解包

- 除了显示的序列解包,如n,m = [2,3]

- 还有一种这样的序列解包 *list, 函数调用里,它会把列表的元素拆开,当作多个独立参数传给函数。

zip() 会把多个可迭代对象“并行”打包成元组序列,返回的是一个迭代器,懒加载,里面的元素和外面的都是元组形式

则zip(*matrix)

倒序打印列表

在列表前面插入元素

这两种优先选择倒序打印[::-1],这和字符反转一样

我犯了一个错误,split()默认空格分割字符,如果字符连在一起则分不开了

怎么去除字符串中的空格

字符串的replace() 方法 :print(s.replace(" ", ""))

处理浮点数很简单,读取的时候像int() 改为 float(), 这个时候输入几位小数就是几位小数

  • 用字符串的方法format()
  • print("{:.3f}".format(float(input()))) 这是自动补0 和四舍五入的
  • "{[字段名]:[格式说明]}".format(值),花括号 {} 内部的 : 是 格式说明符的分隔符
  • 格式说明好用09就是宽度为9,不够补0

我这里有两个短板要补,一个是模运算和除运算总是搞混,一个是2进制和十进制转换代码

  • 模运算%
  • 除运算/
  • 进制转换

python 中的π

  • math.pi
  • np.pi
  • 自己定义的

不能用str(list) 将列表中的元素都为字符,可以用列表生成式和map()

  • [str(x) for x in arr]
  • list(map(str, arr))

其他几个网站练习acm模式**(我还没尝试)**:

牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

华为机试_在线编程_牛客网

AcWing - 在线题库

学习重点

输入:

  • input():读取控制台一行的输入,将接受的数据返回为一个string类型
  • split():默认以空字符为分隔符,包括空格、换行(\n)、制表符(\t)等,也可以是用‘,’ 的字符,返回是是一个list
  • map():map()函数返回的是一个迭代器不能改变值,想要改变值还要加list(),类型转换

所以我们经常用list(map(int, input().split())) 得到输入行的整数

输出:

  • print(): 常与 ‘’.join() 搭配使用,如print("*".join(res))

[TOC]

参考文献

Python ACM 模式下的输入输出 - 文山湖的猫 - 博客园

1. 输入函数模板

1.1 获取输入数据(最基本的用法,input()、split()、map())

Python输入数据主要通过input()函数实现,input()会读取控制台一行的输入,如果输入有多行的话,需要多次使用input()

与Python2中不同,Python3中的input()会将接受的数据返回为一个string类型,如果一行中有多个数据的话,则需要使用split()进行切割。split()切割后返回一个列表。

因为input()返回的是string,分割后也是一个字符列表,如果输入数据是数字则需要进行类型转换。可以单个转换或是用列表批量转换,或者是使用map()并行转换。map()函数返回的是一个迭代器,不能改变值,如果需要改变值的话还需要转换成列表。

note: map()返回的迭代器对象,不会立刻把所有数据转为int, 他是惰性求值,等你迭代到的时候才去计算。迭代器内部的指针就向前走一步,所以最后就“耗尽了”。

1.2 三种情况的输入数据(高级用法)

情况1: 多行输入,同时未指定用例的个数

  • 写上一个while True,把处理逻辑放入 这个循环里面,一般考试的使用没这种情况
  • 需要加上异常捕获,当做结束信号

情况2: 多行输入, 指定用例个数

  • 写一个 for _ in range(n), 这个考试里面几乎都是这一种。这种一定要掌握

情况3: 多行输入,指定某个条件退出

  • while True + if判断。好奇怪,这个不用异常捕获因为这里有结束条件
  • 还可以直接用except()当做结束条件, 这可以捕获EOF

2. 输出函数模板

Python3的输出主要靠print()函数,就是把结果打印至终端。需要对print()函数的sepend两个参数有一定的了解

  • sep
  • end

情况1: 输出单个数字

情况2: 输出多个数字,同时要求以分隔符(sep)隔开

  • 这就要用到 sep,

情况3:最终结果是一个列表

  • 就是把结束符从 换行符改为空字符

情况4: 将字符列表合成一个字符串,需要用到join()函数

  • 这个在考试常用
  • 输出在一行很方便

3. 链表的输入输出

acm模式中的链表也是通过输入一个数组来模拟的,所以获取输入数据和前面没有什么不同。主要在于定义链表结构、将输入数据转化为链表以及输出链表。华为机试:从单向链表中删除指定值的节点华为机试:输出单向链表中倒数第k个节点

4. 二叉树

详见参考文献。

4.1 完全二叉树格式输入

4.2 其他格式输入

参考博客

ACM模式笔试编程题Python3的输入和输出格式详解ACM模式下链表、二叉树的输入Python实现

全部评论
base南京OD,有大量的HC,考虑的话,可以私聊我哦
点赞 回复 分享
发布于 08-16 14:40 贵州

相关推荐

11-28 08:15
门头沟学院 Java
1.你的ai-checker项目中,模型选择的考虑方向是什么?安全性?2.你的提示词要做什么设计?提示词要注意的点3.网页降低延迟的手段?4.http请求怎么减少?5.http1.1一个网页同时最多发起几个请求?http2呢?6.如果基于http1.1,一次只能发送六个请求,我有12个接口,我可以合并接口,但这样把问题丢给了后端,这里怎么解决呢?7.一个接口的实现依赖a服务也依赖b服务接口,他们没有实际依赖,怎么写可以降低时间延迟?8.有没有可能只用一个线程就实现这个效果?详细说一下呢?9.设计一个抽奖的算法,奖品是固定的,但是没办法预估多少人抽奖,活动一天,抽中就给他,人随时都有可能来,但是不知道来多少人,也没办法知道哪个时间来的人多,要设计一个算法,要相对公平,最大难点是没办法预估多少人来抽奖,设计这个算法。10.如果我在广场上做活动带奖品,广场多少人也不知道,也可能多也可能少,和刚刚的问题有什么一样有什么不一样?11.基于10问,可以将时间问题空间化为一个线段,落在线段的点上,怎么做?那么如果我把奖品放在12点了,12点没人来,但是11:59:59有个人来,然后再过半秒有有个人来,怎么获得这个奖品呢?12.如果我有一个全中国的数据,一个用户就是一行,用户的名称有索引但不唯一,我开启一个是事务,锁的范围,是什么,在找一个人的信息的时候?这时候能不能插进去数据?13.小型支付商城系统,既然你能自动续期那要有效期干什么?14.Ai相关的知识,rag,微调等。15.Rag提升准确率有什么办法?
点赞 评论 收藏
分享
12-12 16:33
已编辑
重庆理工大学 Java
【核心问题】中厂实习机会与学校课程硬冲突,该赌一把吗?个人背景:• 学历:双非,目前大三• 实习经历:一段小厂后端实习• 面试进展: 刚通过编程猫(点猫科技)AI全栈实习生(实际是做后端)一面一面结束的时候,面试官明确表示通过,二面在即(明天12-12),HR反馈“90%能过”一、实习机会详情• 公司:编程猫(点猫科技),中厂规模• 岗位:AI全栈实习生(实际做后端)• 一面面试情况:无八股,考察MySQL + 场景题 + Agent相关• 工作内容:新业务线,做AI Agent,需独立设计后端架构,无人带,但会提供Cursor辅助开发• HR反馈:明确表达看好,并询问入职意愿二、当前学业约束课程 考勤/考试要求 风险说明课A 每节课点名,不算分,但缺勤1/3则取消考试资格 必须保证到课,否则挂科课B 每节课点名,缺勤超2次则取消考试资格;另有2次课堂测试(占40分) 缺勤或漏考直接影响成绩,极易挂科课C 期末无考试,需在19周(约1月15日)答辩;平时小组作业逐人检查,出问题全组上台 答辩必须到场,小组检查缺席可能牵连他人马克思 有考试,但相对宽松 压力较小其它 班导师已强调:出校需请假,原则上不允许外出 制度上不支持长期离校三、时间线冲突(若入职)时间 事件 冲突说明12.16(入职) 开始实习 立即面临课A、课B的点名缺勤风险1.15左右 返校进行课C答辩(19周) 必须请假回来,实习中断1.19起 考试周(20周) 需全力备考,实习需再度中断或请假1.25后 可再度返岗 距离春节(2.17)仅约3周,实习时间很短且再次中断四、当前两难• 想去的原因:1. 中厂背书,能大幅提升简历竞争力2. Agent是热门方向,且可独立负责架构,成长空间大3. 之前已因学业放弃一次机会(放弃了一个北京的,还算不错的小厂实习),不想再错过• 不敢去的原因:1. 学校考勤刚性,缺勤直接取消考试资格,挂科风险极高2. 两地奔波,身心俱疲3. 实习时间被切割得很碎,实际投入有限五、关键问题1. 如果拿到offer,我是否应该接受?2. 如果接受,如何应对点名、考试、答辩的刚性约束?(代课是唯一出路?)3. 如果拒绝,如何规划后续(寒假/春招)才能弥补此次机会的损失?六、个人倾向内心想去,但害怕挂科和学校处罚,也担心实习因频繁中断而表现不佳。请各位牛友,特别是经历过类似学业与实习冲突的师兄师姐,给点建议!如果通过,我该接这个offer吗?如果接,该怎么操作?
你开始找寒假实习了吗?
点赞 评论 收藏
分享
评论
3
17
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务