IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> CCF CSP 202109-1 数组推导(C++语言100分)(Python语言100分)[序列处理] -> 正文阅读

[C++知识库]CCF CSP 202109-1 数组推导(C++语言100分)(Python语言100分)[序列处理]

1. 问题链接:CCF202109-1 数组推导

试题编号:202109-1
试题名称:数组推导
时间限制:1.0s
内存限制:512.0MB
问题描述:

题目描述

A1,A2,?,An 是一个由 n 个自然数(即非负整数)组成的数组。在此基础上,我们用数组 B1?Bn 表示 A 的前缀最大值。
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
Data

样例1输出

30
15
Data

样例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
Data

样例2输出

285
285
Data

样例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。

2. 问题分析:

经过读题分析,当 A i = B i A_i=B_i Ai?=Bi?时, A i A_i Ai?始终为表示 A A A 的前缀最大值,即数组 A A A 中前 i i i个数的最大值,此时 s u m sum sum为最大值;因为数组 B B B 单调不降,当数组 B B B连续值第一次不相等时,此时 A i = B i A_i=B_i Ai?=Bi?,连续值相等时从第二次开始均满足 A i = 0 A_i=0 Ai?=0,此时 s u m sum sum为最小值;

3. C++语言程序实现:

#include <iostream>

using namespace std;

int main()
{
    int n,Bi,Bj,sum_max=0,sum_min=0;
    scanf("%d%d",&n,&Bi);
    sum_max=Bi;
    sum_min=Bi;
    for (int i=1;i<n ;i++ )
    {
        scanf("%d",&Bj);
        sum_max+=Bj;
        if (Bi!=Bj)
        {
            sum_min+=Bj;
        }
        Bi=Bj;
    }
    printf("%d\n%d\n",sum_max,sum_min);
	return 0;
}

4. Python语言程序实现:

n=int(input())
B=[int(i) for i in input().split()]
sum_max=sum_min=Bi=B[0]
for Bj in B[1:]:
	sum_max+=Bj
	if Bi!=Bj:
		sum_min+=Bj
	Bi=Bj
print("{}\n{}".format(sum_max,sum_min))
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:14:26  更:2022-03-12 17:14:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:04:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码