用Python3在牛客网acm模式刷题怎么输入输出

870 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

本文主要为了解决之前的一个困扰-----------牛客网的acm模式刷题时到底应该怎么处理输入输出的问题。由于目前各大公司笔试大多都是需要自己调试输入输出,这就可能会让很多习惯力扣核心代码模式的朋友感到不适,遂作此文以解困惑。 (本文使用的语言是Python3)

牛客网acm模式刷题重复输入时while True用法

try :可能抛出异常的语句。 except :捕获异常,处理异常。

while True:
    try:
        #代码部分
    except:
        break

找出给定字符串中大写字符(即'A'-'Z')的个数。

while True:
    try:
        a = 0
        s = input()
        for i in s:
            if i.isupper():
                a += 1
        print(a)
    except:
        break

牛客网acm模式刷题怎么输入输出?

只有一行输入

输入:3 abc bca cab abc 1

ss=input().split()
print(ss)#['3', 'abc', 'bca', 'cab', 'abc', '1']

输入 3 4

m, n = map(int, input().split())

输入一维数组:5 1 2 3 4 5(第一个5为数组长度) 方式1:

s = list(map(int, input().split()))

方式2:

n = input(n)
s = [0]*n
s = [int(i) for i in input().strip().split( )]

有多行输入

输入二维数组: 3 1 3 1 1 5 1 4 2 1 (3为数组行数)

n = input(n)
data = []
for _ in range(n):
    data.append(list(map(int, input().split())))

输入多行数字: 3 2 2 1 (3为数字行数)

line_num,num=int(input()),set()
for i in range(line_num):
    num.add(int(input()))

以空格分隔,输出数组元素

输出1 2 3 4 1 :

a=[1,2,3,4,1]
#方式1:
print(*a)#1 2 3 4 1
#方式2:
for i in range(len(a)):
    print(a[i],end=' ')#1 2 3 4 1 

注意方式2结尾还有个空格。解决方法:

for i in range(len(a)-1):
    print(a[i],end=' ')
print(a[-1])
#1 2 3 4 1

*二维数组

grid = [[1,2,5],[6,7,8],[3,9,4]]
print(grid)#[[1, 2, 5], [6, 7, 8], [3, 9, 4]]
print(*grid)#[1, 2, 5] [6, 7, 8] [3, 9, 4]

一道例题理清acm模式的输入输出

meituan-003. 小美的跑腿代购 小美的一个兼职是美团的一名跑腿代购员,她有 n 个订单可以接,订单编号是 1~n ,但是因为订单的时效性,他只能选择其中 m 个订单接取,精明的小美当然希望自己总的获利是最大的,已知,一份订单会提供以下信息,跑腿价格 v ,商品重量 w kg,商品每重 1kg ,代购费用要加 2 元,而一份订单可以赚到的钱是跑腿价格和重量加价之和。小美可是开兰博基尼送货的人,所以自然不会在意自己会累这种事情。请问小美应该选择哪些订单,使得自己获得的钱最多。 请你按照选择的订单编号的从小到大顺序,如果存在多种方案,输出订单编号字典序较小的方案。

格式:

输入:

  • 输入第一行包含两个正整数 n,m,表示订单的数量和小美可以接的订单数量。
  • 接下来有 n 行,第 i 行表示 i-1 号订单的信息。每行有两个正整数 v 和 w ,表示一个订单的跑腿价格和商品重量。

输出:

  • 输出包含 m 个 1~n 之间的正整数,中间用空格隔开,表示选择的订单编号。
输入:
     5 3
     5 10
     8 9
     1 4
     7 9
     6 10
输出:3 5

解法:

n, m = map(int, input().split( ))#5 2
res = []
for i in range(n):
    v, w = map(int, input().split( ))
    res.append((v+w*2, i+1))#[(25, 1), (26, 2), (9, 3), (25, 4), (26, 5)]
res.sort(key=lambda x: (-x[0],x[1]))#[(26, 2), (26, 5), (25, 1), (25, 4), (9, 3)]
res1 = sorted([i for _, i in res[:m]])#[1, 2, 5]
print(*res1)#1 2 5

巩固加深1 巩固加深2