首页 > 试题广场 >

小美的数组询问

[编程题]小美的数组询问
  • 热度指数:659 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。
现在小美想知道,如果那些未知的元素在区间[l,r]范围内随机取值的话,数组所有元素之和的最小值和最大值分别是多少?
共有q次询问。

输入描述:
第一行输入两个正整数n,q,代表数组大小和询问次数。
第二行输入n个整数a_i,其中如果输入的a_i为 0,那么说明a_i是未知的。
接下来的q行,每行输入两个正整数 l,r,代表一次询问。
1\leq n,q \leq 10^5
0 \leq a_i \leq 10^9
1\leq l \leq r \leq 10^9


输出描述:
输出q行,每行输出两个正整数,代表所有元素之和的最小值和最大值。
示例1

输入

3 2
1 0 3
1 2
4 4

输出

5 6
8 8

说明

只有第二个元素是未知的。
第一次询问,数组最小的和是 1+1+3=5,最大的和是 1+2+3=6。
第二次询问,显然数组的元素和必然为 8。

n, q = map(int, input().split())
numbers = list(map(int, input().split()))
 
cnt = 0
summation = sum(numbers)
cnt = numbers.count(0)
 
for _ in range(q):
    l, r = map(int, input().split())
    print((summation + l * cnt), (summation + r * cnt))
这个到底为啥不行?编译错误了

编辑于 2024-10-20 06:20:31 回复(0)
请问为何这死在第一个case?
import sys
 
try:
    line = sys.stdin.readline().strip()
    lines = line.split()
    numlen=int(lines[0])
    inplen=int(lines[1])
    realinput=sys.stdin.readline().strip()
    count0=realinput.count(" 0 ")+(1ifrealinput.startswith("0 ") else0)+(1ifrealinput.endswith(" 0") else0)
    batch_count=inplen
    run_count=0
    basenum=sum(map(int,realinput.split()))
    whileTrue:
        line = sys.stdin.readline().strip()
        ifline == '':
            break
        lines = line.split()
        ifrun_count < batch_count:
            run_count+=1
            print(str(basenum+count0*int(lines[0]))+" "+str(basenum+count0*int(lines[1])))
        else:
            break
 
except:
    pass
发表于 2024-08-14 21:12:09 回复(0)

详细题解请移步至 ABC

发表于 2024-06-27 17:49:52 回复(0)