卡码网 ACM答题编程模板
背景:
input()
在 ACM 编程中的底层调用原理
1. input()
的核心原理
- 在 Python 中,
input()
的底层实现依赖于标准输入流sys.stdin
。 - 每次调用
input()
时,Python 会从sys.stdin
中读取一行字符串,直到遇到换行符\n
或文件结束符(EOF)。 - 读取的数据会以字符串形式返回,并自动去掉行末的换行符。
2. 输入在 ACM 编程中的特点
- 在 ACM 比赛中,输入通常是标准输入形式(例如,通过
stdin
提供一个多行文本流)。 - Python 的
input()
会逐行读取这些数据,因此与每次调用input()
配合使用,可以逐步解析多行输入。
3. 如何处理输入结束
- 在竞赛中,输入结束通常通过以下方式实现:
- 文件结束符(EOF):例如在本地测试中可以通过
Ctrl+D
(Linux/Mac)或Ctrl+Z
(Windows)模拟输入结束。 - 固定输入行数:通过第一行的数字
n
确定后续输入的行数。
- 文件结束符(EOF):例如在本地测试中可以通过
- 当
input()
遇到 EOF 时,会抛出EOFError
异常,可以通过try-except
捕获并处理。
另一种读入方式是:
import sys
input = sys.stdin.read # 读取所有输入
data = input().splitlines() # 按行分割print(data)
1.
输入形式:
输入是一系列的a和b对(字符串),通过空格隔开。一对a和b占一行:
while True:try:s = input().split(' ')a, b = int(s[0]), int(s[1])print(a + b)except EOFError:break
2.
输入形式:
输入是一中复合信息,第一行表示总共有多少行输入,后面跟实际输入:
def calculate(s):return int(s[0]) + int(s[1])while True:try:n = int(input())for i in range(n):s = input()s = s.split(' ')print(calculate(s))except EOFError:break
3.
输入形式:
有一个终止判断的输入形式
while True:try:s = input()num = s.split(' ')res = int(num[0]) + int(num[1])if s != '0 0':print(res)except EOFError:break
4.
输入形式:
一个长的字符串,有一部分需要,一部分不重要。使用map函数进行整体数据类型的变化(重要)。
while True:nums = input().split()if int(nums[0]) == 0:breaknums = list(map(int, nums[1:]))ans = sum(nums)print(ans)
5.
输入形式:
不同输入形式,输出要求包含空行隔断。
while True:try:a, b = input().split(' ')print(int(a) + int(b), end='\n\n')except Exception:break
6.
输入形式:
最后一行不要换行,因此第一个输入是有用的,使用第一个input的信息进行循环。
1. input()
是逐行读取的
input()
是 Python 的内置函数,用于从标准输入中读取一行文本。每次调用input()
,它会等待用户输入一行文本并按下回车后返回该行的内容。- 在这段代码中,
n = int(input())
只读取第一行输入,不会影响后续的输入数据。后续的input()
调用会依次读取剩下的每一行。
2. 每次 input()
独立处理一行
- 在
for i in range(n)
中,input()
会独立读取每一行数据,并将其作为当前循环的输入。 - 因此,即使后续输入中包含多组数据,也不会干扰
n
的值或控制循环次数。
while True:try:n = int(input())for i in range(n):nums = list(map(int, input().split(' ')))print(sum(nums[1:]))if i != n - 1:print()except Exception:break
7.
输入形式:
需要使用字典维护输入字符串
gpa_map = {'A': 4,'B': 3,'C': 2,'D': 1,'F': 0,
}while True:try:input_grade = input().split(' ')sum_grade = 0valid = Truefor grade in input_grade:if grade in gpa_map:sum_grade += gpa_map[grade]else:print('Unknown')valid = Falsebreakif valid:print("{:.2f}".format(sum_grade/len(input_grade)))except EOFError:break
格式化函数:
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:-.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:>10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
11 | '{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11) | 1011 11 13 b 0xb 0XB | 进制 |
8.
输入形式:
分行式的多组测试样例,先用sys.stdin.read + input().splitlines() 看一下整体输入,然后根据题意答题
import sysdef mean(s):return sum(s) / len(s)while True:try:heap_num = int(input())heap_list = list(map(int, input().split(' ')))ave_height = mean(heap_list)move = 0for i in range(len(heap_list)):if heap_list[i] - ave_height > 0:move += heap_list[i] - ave_heightprint(int(move))print()except EOFError:break
9.
输入形式:
字符串输入转整型判断
while True:try:s = input()# print(s)res = 0for i in s:if int(i) % 2 == 0:res += int(i)print(res, end='\n\n')except EOFError:break
10.
输入形式:
本题开始稍加一点难度,主要是展示使用函数对象入门
def calculate(m, k):if k:bonus = m // k if bonus or m - (bonus * k) + bonus > k:bonus += calculate(m % k + bonus, k)return bonuselse:return 0while True:try:m, k = list(map(int, input().split(' ')))if m == 0 and k == 0:breakres = m + calculate(m, k) print(res)except EOFError:break
11. 共同祖先
输入形式:
输入作为字典键值对录入
def find_ansester(i, family_dict):gen = 0while i:i = family_dict.get(i, '')if i != '':gen += 1return gendef find_relation(a, b, family_dict):a_gen = find_ansester(a, family_dict)b_gen = find_ansester(b, family_dict)# print(a_gen, b_gen)if a_gen > b_gen:print('You are my elder')elif a_gen < b_gen:print('You are my younger')else:print('You are my brother')while True:try:generation = int(input())family_dict = dict()for i in range(generation):son, dad = list(map(int, input().split(' ')))family_dict[son] = dadfind_relation(1, 2, family_dict)except EOFError:break
12. 打印数字图形
输入描述:
简单输入,模拟类题目,直接暴力
while True:try:n = int(input())for i in range(1, n + 1):left = [' '] * (n - i) + [str(j) for j in range(1, i + 1)]tmp = left[:-1]right = tmp[::-1]right = [ele.replace(' ', '') for ele in right]s = left + rightprint(''.join(s))for i in range(n - 1, 0, -1):left = [' '] * (n - i) + [str(j) for j in range(1, i + 1)]tmp = left[:-1]right = tmp[::-1]right = [ele.replace(' ', '') for ele in right]s = left + rightprint(''.join(s))except EOFError:break
13. 镂空三角形
输入形式:
有终止符号,注意判断。模拟类问题
while True:try:## 每一行实际数量是 i * 2 - 1 行前空格数是n - iline = input().split()if line[0] == '@':breakn = int(line[1])pattern = line[0]for i in range(1, n + 1):if i < n:t = [' '] * (n - i)new_s = list()for idx in range(i * 2 - 1):if idx == 0 or idx == i * 2 - 2:new_s.append(pattern)else:new_s.append(' ')row = t + new_selse:row = [pattern] * (i * 2 - 1)print(''.join(row))print()except EOFError:break
相关文章:

卡码网 ACM答题编程模板
背景: input() 在 ACM 编程中的底层调用原理 1. input() 的核心原理 在 Python 中,input() 的底层实现依赖于标准输入流 sys.stdin。每次调用 input() 时,Python 会从 sys.stdin 中读取一行字符串,直到遇到换行符 \n 或文件结束…...

逆向入门(6)汇编篇-外挂初体验
代码分析部分 游戏里面还是体验了不少自己CV来的外挂的,自己编写的程序还是头一次体验,程序源码如下 void startAcctack() {printf("开始攻击\n");// 获取当前系统时间time_t now time(0); // 获取当前时间的时间戳struct tm *local_time …...

Vulnhub靶场(Earth)
项目地址 https://download.vulnhub.com/theplanets/Earth.ova.torrent 搭建靶机 官网下载.ova文件双击vm打开导入 获取靶机IP kail终端输入 arp-scan -l 获取靶机 IP 192.168.131.184 信息收集 端口扫描 sudo nmap -sC -sV -p- 192.168.131.184 可以看到开启22端口&…...
CSP初赛知识学习计划
CSP初赛知识学习计划 学习目标 在20天内系统掌握CSP初赛所需的计算机基础知识、编程概念、数据结构、算法等内容,为初赛取得优异成绩奠定坚实基础。 资料收集 整理的CSP知识点文档。相关教材,如《信息学奥赛一本通》等。在线编程学习平台,…...

信息科技伦理与道德1:研究方法
1 问题描述 1.1 讨论? 请挑一项信息技术,谈一谈为什么认为他是道德的/不道德的,或者根据使用场景才能判断是否道德。判断的依据是什么(自身的道德准则)?为什么你觉得你的道德准则是合理的,其他…...

高中数学部分基础知识
文章目录 一、集合二、一元二次方程三、函数四、指数函数五、对数函数六、三角函数1、角度和弧度2、三角函数 高中知识体系丰富,虽然毕业后再也没用过,但是很多数学逻辑还是非常经典的,能够启发我们如何制作逻辑工具去解决现实问题。以下做出…...
机器人领域的一些仿真器
模拟工具和环境对于开发、测试和验证可变形物体操作策略至关重要。这些工具提供了一个受控的虚拟环境,用于评估各种算法和模型的性能,并生成用于训练和测试数据驱动模型的合成数据。 Bullet Physics Library 用于可变形物体模拟的一个流行的物理引擎是 B…...

5大常见高并发限流算法选型浅析
高并发场景下,如何确保系统稳定运行,成为了每一个开发工程师必须面对的挑战。**你是否曾因系统崩溃、请求超时或资源耗尽而头疼不已?**高并发限流算法或许能帮你解决这些难题。 在处理高并发请求时,应该如何选择合适的限流算法呢…...

深入刨析数据结构之排序(下)
目录 1.内部排序 1.5选择排序 1.5.1简单选择排序 1.5.2树形选择排序 1.6堆排序 1.7归并排序 1.7.1递归归并 1.7.2非递归归并 1.8计数排序 1.9基数排序 常见内部排序的总结: 1.内部排序 1.5选择排序 选择排序(Selection Sort)的基…...

特殊数据类型的深度分析:JSON、数组和 HSTORE 的实用价值
title: 特殊数据类型的深度分析:JSON、数组和 HSTORE 的实用价值 date: 2025/1/4 updated: 2025/1/4 author: cmdragon excerpt: 随着数据管理需求的多样化,许多现代数据库系统开始支持特殊数据类型,以满足更多复杂应用场景的需求。在 PostgreSQL 中,JSON、数组和 HSTOR…...

PCA降维算法详细推导
关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…...

NS4861 单灯指示独立耳锂电池充放电管理 IC
1 特性 最大 500mA 线性充电电流,外部可调节 内部预设 4.2V 充电浮充电压 支持 0V 电池充电激活 支持充满 / 再充功能 内置同步升压放电模块,输出电压 5.1V 同步升压 VOUT 最大输出电流 500mA VOL/OR 独…...
编写可复用性的模块
在生活中,重复的机械劳动会消耗我们的时间和精力,提高生产成本,降低工作效率。同样,在代码世界中,编写重复的代码会导致代码的冗余,页面性能的下降以及后期维护成本的增加。由此可见将重复的事情复用起来是…...
2025年1月4日CSDN的Markdown编辑器
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

广域网连接PPP
广域网连接PPP PPP协议是一种应用广泛的点到点链路协议,主要用于点到点连接的路由器间的通信。PPP协议既可以用于同步通信,也可以用于异步通信,本部分只讨论同步接口上的PPP配置。 锐捷路由器的同步串行口默认封装Cisco HDLC,所…...

【pyqt】(四)Designer布局
布局 之前我们利用鼠标拖动的控件的时候,发现一些部件很难完成对齐这些工作,pyqt为我们提供的多种布局功能不仅可以让排版更加美观,还能够让界面自适应窗口大小的变化,使得布局美观合理。最常使用的三种布局就是垂直河子布局、水…...

【从零开始入门unity游戏开发之——C#篇40】C#特性(Attributes)和自定义特性
文章目录 前言一、特性(Attributes)基本概念二、自定义特性1、自定义特性代码示例:2、应用自定义特性:3、解释3.1 **AttributeUsage 特性**3.2 特性的命名3.3 **构造函数**:3.4 **属性**: 4、使用反射获取特…...
DES密码的安全性分析(简化版本)
DES仍是世界上使用最广的(DES发行后20年,互联网的兴起,人们开始觉得DES不安全了,但DES的实现成本也越来越低) 宏观分析: 密钥空间方面: 密钥长度:DES 算法使用 56 位的密钥对数据…...
引入三方jar包命令
mvn install:install-file \ -Dfile本地磁盘路径 \ -DgroupId组织名称 \ -DartifactId项目名称 \ -Dversion版本号 \ -Dpackagingjar 例如 假设你的 JAR 文件路径是 /home/user/common-pojo-1.0-SNAPSHOT.jar,组织名称是 com.example,项目名…...

机器学习基础-机器学习的常用学习方法
半监督学习的概念 少量有标签样本和大量有标签样本进行学习;这种方法旨在利用未标注数据中的结构信息来提高模型性能,尤其是在标注数据获取成本高昂或困难的情况下。 规则学习的概念 基本概念 机器学习里的规则 若......则...... 解释:如果…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...