首页 > 试题广场 >

小红结账

[编程题]小红结账
  • 热度指数:2104 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
大家一起吃饭的时候,总是小红先付钱,然后大家再把钱转给小红。

现在小红有 n 张账单,每张账单记录了有 k 个人一起吃饭,以及吃饭的消费 c ,现在小红需要计算每个人需要转给小红多少钱。

由于大家都比较喜欢整数,所以大家每张账单会转给小红 \lceil \frac{c}{k} \rceil\lceil x \rceil 表示对 x 进行上取整。

输入描述:
第一行输入两个整数 n,m(1 \leq n,m \leq 10^5) 表示账单数和除小红外的总人数(分别用 1m 表示)。

接下来 2\times n 行,每 2 行表示一张账单。对于每张账单:

第一行输入两个整数 k (2 \leq k \leq m+1),c(1 \leq c \leq 10^9) 表示一起吃饭的人数,花费。

第二行输入 k-1 个整数,表示除小红外有哪些人一起吃饭。

数据保证, k 的总和不超过 2\times 10^5


输出描述:
输出 m 个整数,表示每个人要给小红转账的总金额。
示例1

输入

2 3
3 10
1 2
4 8
1 2 3

输出

6 6 2

说明

第一张账单:第1、2个人都会给小红转4元
第二张账单:第1、2、3个人都会给小红转2元
因此答案为4+2=6,4+2=6,2
from math import ceil


n, m = list(map(int, input().split()))
res = [0]*m
for _ in range(n):
    k, c = list(map(int, input().split()))
    a = list(map(int, input().split()))
    cur = ceil(c/k)
    for ai in a:
        res[ai-1] += cur
print(*res)
发表于 2023-08-29 22:05:58 回复(0)