CCF202109-1 数组推导(100分)序列处理
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF202109-1 数组推导(100分)序列处理相关的知识,希望对你有一定的参考价值。
试题编号: 202109-1
试题名称: 数组推导
时间限制: 1.0s
内存限制: 512.0MB
问题描述:
题目描述
A1,A2,…,An是一个由 n个自然数(即非负整数)组成的数组。在此基础上,我们用数组B1…Bn表示A的前缀最大值。
B
i
=
m
a
x
{
A
1
,
A
2
,
.
.
.
,
A
i
}
Bi=max\\{A1,A2,...,Ai\\}
Bi=max{A1,A2,...,Ai}
如上所示,Bi定义为数组A中前i个数的最大值。
根据该定义易知A1=B1,且随着i的增大,Bi单调不降。
此外,我们用sum=A1+A2+…+An表示数组A中n个数的总和。
现已知数组B,我们想要根据B的值来反推数组A。
显然,对于给定的B,A的取值可能并不唯一。
试计算,在数组A所有可能的取值情况中,sum的最大值和最小值分别是多少?
输入格式
从标准输入读入数据。
输入的第一行包含一个正整数n。
输入的第二行包含n个用空格分隔的自然数B1,B2,…,Bn。
输出格式
输出到标准输出。
输出共两行。
第一行输出一个整数,表示sum的最大值。
第二行输出一个整数,表示sum的最小值。
样例1输入
6
0 0 5 5 10 10
样例1输出
30
15
样例1解释
数组A的可能取值包括但不限于以下三种情况。
情况一:A = [0, 0, 5, 5, 10, 10]
情况二:A = [0, 0, 5, 3, 10, 4]
情况三:A = [0, 0, 5, 0, 10, 0]
其中第一种情况 sum = 30 为最大值,第三种情况 sum = 15 为最小值。
样例2输入
7
10 20 30 40 50 60 75
样例2输出
285
285
样例2解释
A = [10, 20, 30, 40, 50, 60, 75] 是唯一可能的取值,所以 sum 的最大、最小值均为 285。
子任务
50% 的测试数据满足数组 B 单调递增,即 0 < B1 < B2 < … < Bn < 105;
全部的测试数据满足 n ≤ 100 且数组 B 单调不降,即 0 ≤ B1 ≤ B2 ≤ … ≤ Bn ≤ 105。
问题链接:CCF202109-1 数组推导
问题简述:(略)
问题分析:
需要计算B数组之和,B数组不重复数之和。
由于B单调递增,用C/C++和Java语言程序中,去除重复只需要前后元素进行比较就可以了。
这个题没有必要用数组来存储读入的数据,读入数据流中的数据进行计算处理就可以了。
程序说明:Python的解题程序由仙客传奇团队的郭同学提供。
参考链接:(略)
题记:(略)
100分的C语言程序如下:
/* CCF202109-1 数组推导 */
#include <stdio.h>
int main()
{
int n, b, last = - 1, sum = 0, sum2 = 0, i;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%d", &b);
sum += b;
if (b != last) sum2 += b;
last = b;
}
printf("%d\\n%d\\n", sum, sum2);
return 0;
}
100分的Java语言程序如下:
/* CCF202109-1 数组推导 */
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), b, last = -1, sum = 0, sum2 = 0;
for (int i = 1; i <= n; i++) {
b = sc.nextInt();
sum += b;
if (b != last) sum2 += b;
last = b;
}
System.out.println(sum);
System.out.println(sum2);
}
}
100分的Python语言程序如下:
# CCF202109-1 数组推导
n = int(input())
nums = [int(num) for num in input().split()]
print(sum(nums))
print(sum(set(nums)))
以上是关于CCF202109-1 数组推导(100分)序列处理的主要内容,如果未能解决你的问题,请参考以下文章