Python3 ACM模式输入输出全攻略:从牛客网到华为机试的实战技巧

Python ACM模式输入输出全攻略:牛客网与华为机试必备 在线判题系统(OJ)要求程序通过标准输入输出流与评测内核交互,这与日常IDE中的函数式调试完全不同。理解sys.stdin、input()与sys.stdin.buffer的分工,掌握按行读取、EOF循环、格式化输出等核心技巧,是解决牛客网与华为机试题目的基础。合理组织数据解析与结果输出,不仅能规避“答案错误”或“运行时异常”的尴尬,还能在数据量庞大时显著提升效率。从通用输入输出模型到实际工程中的字符串、矩阵、图结构处理,这套方法论适用于绝大多数编程竞赛和机试场景。掌握这些底层能力,才能在限时评测中稳定发挥 阅读详情

Python3 ACM模式输入输出全攻略:从牛客网到华为机试的实战技巧

如果你是从LeetCode这类“核心代码模式”平台转向牛客网、华为机试等在线评测系统(OJ)的Python选手,那么第一个要翻越的山头,往往不是算法本身,而是输入输出(I/O)。在LeetCode,你只需要关心函数实现,输入参数已经为你准备好。但在ACM模式下,你需要自己从标准输入读取数据,处理后再输出到标准输出。这看似简单,却能在笔试中消耗大量调试时间,甚至因为格式错误导致功亏一篑。这篇文章,我将结合自己参加多次机试和竞赛的经验,为你梳理一套从基础到进阶,覆盖高频场景的Python3 ACM模式I/O处理方案。我们不止于“怎么读”,更要深入“为什么这么读”,以及在不同约束下如何选择最高效、最稳妥的写法。

1. 理解核心:Python输入的本质与三板斧

Python的input()函数,是我们在ACM模式下获取数据的唯一窗口(不考虑sys.stdin)。它的行为非常单纯:读取一行输入,并返回一个字符串(str),末尾的换行符会被自动剥离。这个简单的定义,是所有复杂处理的基础。

注意:input()在读取到文件结束符(EOF)时会抛出EOFError异常。在本地测试时,你通常用Ctrl+D(Unix/Linux/Mac)或Ctrl+Z(Windows)来模拟EOF。

基于这个特性,处理任何输入都离不开三个核心操作,我称之为“三板斧”:

  1. strip():去除字符串首尾的空白字符(空格、制表符、换行符)。虽然input()默认去掉了末尾换行,但有时题目输入可能包含多余空格,使用input().strip()是更安全的习惯。
  2. split():将字符串按指定的分隔符拆分成列表。默认按任意空白字符(空格、换行、制表符等)分割,非常适用于数字和单词的拆分。你也可以指定分隔符,如split(',')。
  3. map():将一个函数映射到一个可迭代对象的所有元素上。在处理数字输入时,我们最常用map(int, ...)将字符串列表转换为整数迭代器。

这三者的组合,构成了最基础的输入解析链。例如,读取一行两个整数:

# 标准写法
a, b = map(int, input().strip().split())

让我们拆解一下这个过程:

  • input() 读取到类似 "10 20\n" 的字符串。
  • .strip() 确保移除首尾可能的空白,得到 "10 20"。
  • .split() 按空格分割,得到列表 ['10', '20']。
  • map(int, ...) 将列表中的每个字符串应用int()函数,得到一个map对象,内容为(10, 20)。
  • a, b = ... 使用序列解包,将两个值分别赋给a和b。

这里有一个常见的“坑”:map对象是一个迭代器,它不会立即计算所有值,也不能通过索引访问。如果你需要多次使用转换后的数据,或者需要知道其长度,应该将其转换为列表:

# 如果需要列表
data_list = list(map(int, input().split()))
# 现在你可以使用 data_list[0], len(data_list) 等

对于更复杂的单行输入,比如一行包含不定数量的整数,列表推导式是另一种清晰的选择:

# 使用列表推导式
data = [int(x) for x in input().split()]

这两种方式在功能上等价,但在风格和细微性能上略有差异。map通常更函数式,而列表推导式更直观。在大多数机试题的数据量下,性能差异可以忽略不计。

2. 高频场景拆解:六种经典输入模式

掌握了基本工具后,我们面对的是千变万化的题目输入格式。根据我的经验,绝大多数机试题的输入可以归纳为以下六种模式。理解并熟练运用对应的模板,能让你在考场上快速搭建代码框架。

2.1 模式一:已知数据组数(最常见)

这是最友好的模式。第一行给出测试用例的数量T,随后跟着T组数据。

输入示例:

2
3
1 2 3
4
5 6 7 8

处理模板:

T = int(input().strip())  # 读取组数
for _ in range(T):
    # 读取每组数据的第一行(例如数组长度)
    n = int(input().strip())
    # 读取该组数据的具体内容
    arr = list(map(int, input().strip().split()))
Python3 ACM模式输入输出全攻略:从零开始搞定牛客网机试题 本文详细解析了Python3在ACM模式下的输入输出全攻略,帮助开发者快速适应牛客网等机试平台。文章从核心差异讲起,系统讲解了单行、多行、不定组数据的处理方法,并提供了链表、二叉树等复杂结构的输入实战模板,旨在让读者掌握高效、准确的I/O技巧,将精力集中于算法逻辑本身。 阅读详情

相关推荐

【ACM模式实战】牛客网OJ输入输出全攻略:Python/Java/C++三语言对比解析

本文详细解析了牛客网ACM模式下Python、Java和C++三种语言的输入输出处理技巧,提供实战代码模板和避坑指南。通过对比三语言在不同场景下的表现,帮助开发者高效应对编程竞赛和机试挑战,特别适合准备华为等企业机试的求职者。

weixin_29055699的博客 444

华为AI软件岗面试全攻略:高频考点与真题实战解析

在人工智能技术快速迭代的背景下,企业招聘对算法工程师的要求已从单一模型知识转向工程落地与前沿应用的深度融合。机器学习基础原理、深度学习网络结构以及大模型微调与推理优化,构成了AI岗位面试的核心知识框架。以检索增强生成(RAG)和低秩适配(LoRA)为代表的技术,不仅解决了大模型幻觉与高效微调的现实问题,也成为了衡量候选人技术视野的关键维度。从传统的算法编码到系统性能调优,再到Agent编排等新型应用场景,面试考察的广度与深度持续扩展。华为AI软件岗的筛选逻辑正体现了这一趋势,本文围绕其高频考点,从基础算法、

weixin_34174322的博客 352

OJ在线编程输入输出全攻略:从标准流到本地调试与模板

在算法笔试与竞赛中,标准输入输出(stdin/stdout)是评测系统与程序交互的唯一通道。理解评测机如何重定向文件流,是解析各类数据格式的前提。从单行整数到EOF多组数据,从逗号分隔符到带引号字符串,掌握Python和C++的高效读入与格式化输出,能显著提升解题效率。本文不仅覆盖常见OJ题型的代码模板,还深入本地文件重定向调试、VSCode配置及性能优化技巧,帮助学习者在华为OJ、牛客网等平台稳定发挥。无论你是刚接触在线编程的新手,还是准备大厂机考的开发者,锤炼输入输出基本功都是通往高分的关键一步,也是真

benben 470

计算机保研预推免笔面试全攻略:从算法真题到项目深挖

在计算机技术领域,算法与数据结构是衡量开发者核心能力的重要标尺,其原理在于通过高效的数据组织与计算策略解决复杂问题。掌握经典算法不仅能提升代码性能,更体现了扎实的计算机科学基础,对于构建高并发、高可用的分布式系统具有关键价值。无论是互联网大厂的研发岗位,还是顶尖院校的科研选拔,对算法实现、系统设计及项目实践能力的考察都是核心环节。本文聚焦计算机保研预推免中的笔面试实战,深入解析如何针对性准备机试真题与八股文,并有效展现项目深度,帮助考生在算法与工程能力的双重考核中脱颖而出。

weixin_32050773的博客 383

华为OD机试Python备考全攻略:从输入输出到高频题型实战

在线编程评测(OJ)是技术岗位招聘中常见的筛选方式,而华为OD机试正是许多候选人进入外包研发岗的第一关。它以ACM模式为核心,要求考生在规定时间内完成多道算法与逻辑模拟题,重点考察数据结构、边界条件处理与编码基本功。Python因其语法简洁、内置库丰富,被公认为上手成本最低的机试语言,但需注意运行效率与输入输出模板的规范性。通过系统刷题、掌握sys.stdin.read()读取技巧、熟悉高频算法(如排序、双指针、DFS/BFS)以及规避常见坑点,即可显著提升通过率。本文基于实际备考经验,从环境搭建到考场保命

weixin_29309475的博客 183

华为OD机试Python备考全攻略:从输入模板到算法选型,稳拿分的关键技巧

在技术招聘流程中,在线编程测评是衡量候选人工程能力与算法基础的重要关卡,而在线判题系统通常采用ACM模式,要求考生自行处理标准输入输出,这与日常IDE开发体验差异显著。深入理解判题原理、掌握高效读写模板,是提升编码效率的第一步。与此同时,数据规模决定了算法选型,从暴力枚举到动态规划、DFS/BFS搜索,只有在复杂度边界内选择合适解法,才能在有限时间内稳定得分。这类技能广泛应用于华为OD机试等企业级技术考核,也是软件工程师日常解决实际问题时必备的底层能力。本文围绕Python语言在机试环境中的实战要点,系统梳

weixin_27215337的博客 141

避坑指南:STM32CubeMX配置SDIO4bit模式时为什么卡在HAL_SD_ConfigWideBusOperation?

本文深入分析了使用STM32CubeMX配置SDIO 4位模式时,程序在HAL_SD_ConfigWideBusOperation函数处卡死的常见问题。文章从硬件连接、CubeMX配置、初始化序列及HAL库底层实现等多个维度剖析根源,并提供了从初始化流程优化到增强代码鲁棒性等实战解决方案,帮助开发者彻底解决这一棘手难题。

pca5navigator的博客 824

双重机器学习 stata教程 手把手教学

双重机器学习(DDML)的stata教程

weixin_59030591的博客 1万+

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 282

开关电源EMC整改实录:用WSX系列共模电感搞定30MHz辐射超标

本文详细介绍了开关电源EMC整改实战,通过WSX系列共模电感成功解决30MHz频段辐射超标问题。文章分析了共模干扰的产生机制,对比了不同磁芯材料的性能差异,并提供了电路布局优化与安装技巧,最终通过实测数据验证了整改方案的有效性。

weixin_29305313的博客 413

MBD-从一个示例看代码生成过程(rtw文件、TLC语言)

大概介绍了MBD代码生成流程,rtw文件、TLC语言

小胡同学的工程师学习之路 4212

【PyQt】使用PyQt6基于Scenedetect制作视频场景自动分割应用

通过详细介绍PySceneDetect的功能和应用,本文阐释了如何利用这一工具提高视频编辑的效率。我们讨论了安装方法、命令行使用示例以及如何在Python脚本中集成PySceneDetect。此外文章还涵盖了基于PyQt6的图形界面设计,通过多线程技术处理视频,保证界面的响应性,并通过实时反馈机制提升用户体验。无论是专业的视频制作团队还是个人爱好者,PySceneDetect都提供了一种可行的、效率高的场景检测工具,让视频编辑工作变得更加简单快捷。

Mr数据杨 958

UE5接入在线直播视频源,如hls(m3u8)格式

UE5接入在线直播视频源

专注GIS开发 9496

微信小程序|基于小程序+云开发制作一个租房小程序

经济发展的同时伴随着大批人群的流动,租房需求一直是持久不衰的话题,如何租好房,好租房,跟随此文一起制作一个租房小程序,让租房不再困难。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 4926

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: ROS数据转换实战:如何用rostopic和sh脚本批量处理rosbag到CSV(附避坑指南)
下一篇: UE4开发环境搭建全攻略:从下载到配置Visual Studio 2017(避坑指南)
zero1
博客等级 码龄24年 951粉丝 1198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值