【NOIP提高组】合唱队形

news/2024/11/8 9:01:34/

NOIP提高组】合唱队形


💐The Begin💐点点关注,收藏不迷路💐

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<…Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入

输入的第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。

输出

输出文一行,这一行只包含一个整数,就是最少需要几位同学出列。

样例输入

8
186 186 150 200 160 130 197 220

样例输出

4

提示

【数据规模】
对于50%的数据,保证有n<=20;
对于全部的数据,保证有n<=100。

C语言

#include <stdio.h>#define MAX_STUDENTS 105int main() {int heights[MAX_STUDENTS]; // 存储同学身高的数组,简称heightsint leftIncreasing[MAX_STUDENTS]; // 记录从左往右每个位置左边递增序列长度,简称leftIncreasingint rightDecreasing[MAX_STUDENTS]; // 记录从右往左每个位置右边递减序列长度,简称rightDecreasingint chorusSizes[MAX_STUDENTS]; // 记录每个位置左右序列合并后的合唱队形大小,简称chorusSizesint numStudents; // 同学的总数,简称numStudentsint maxChorusSize; // 最大的合唱队形大小,简称maxChorusSize// 读取同学总数scanf("%d", &numStudents);// 读取每位同学的身高,并初始化相关数组for (int i = 1; i <= numStudents; i++) {scanf("%d", &heights[i]); // 读取第i位同学的身高并存入heights数组,简称i为同学序号leftIncreasing[i] = 1;rightDecreasing[i] = 1;}// 从右往左,按左高右低顺序找出每一个位置右边有几个从高到低的数(包括自己)for (int i = numStudents - 1; i >= 1; i--) {for (int j = i + 1; j <= numStudents; j++) {if (heights[i] > heights[j] && leftIncreasing[i] <= leftIncreasing[j] + 1) {leftIncreasing[i] = leftIncreasing[j] + 1;}}}// 从左往右,按左低右高顺序找出每一个位置左边有几个从低到高的数(包括自己)for (int i = 2; i <= numStudents; i++) {for (int j = 1; j < i; j++) {if (heights[i] > heights[j] && rightDecreasing[i] <= rightDecreasing[j] + 1) {rightDecreasing[i] = rightDecreasing[j] + 1;}}}maxChorusSize = 0;// 计算每个位置左右序列合并后的合唱队形大小,并找出最大的合唱队形大小for (int i = 1; i <= numStudents; i++) {chorusSizes[i] = leftIncreasing[i] + rightDecreasing[i] - 1;// 注意!自己加了两次要 -1if (chorusSizes[i] > maxChorusSize) {maxChorusSize = chorusSizes[i];}}// 输出最少需要出列的同学数printf("%d\n", numStudents - maxChorusSize);return 0;
}

Java

import java.util.Scanner;public class Main {public static final int MAX_STUDENTS = 105;public static void main(String[] args) {int[] heights = new int[MAX_STUDENTS]; // 存储同学身高的数组,简称heightsint[] leftIncreasing = new int[MAX_STUDENTS]; // 记录从左往右每个位置左边递增序列长度,简称leftIncreasingint[] rightDecreasing = new int[MAX_STUDENTS]; // 记录从右往左每个位置右边递减序列长度,简称rightDecreasingint[] chorusSizes = new int[MAX_STUDENTS]; // 记录每个位置左右序列合并后的合唱队形大小,简称chorusSizesint numStudents; // 同学的总数,简称numStudentsint maxChorusSize; // 最大的合唱队形大小,简称maxChorusSizeScanner scanner = new Scanner(System.in);// 读取同学总数numStudents = scanner.nextInt();// 读取每位同学的身高,并初始化相关数组for (int i = 1; i <= numStudents; i++) {heights[i] = scanner.nextInt(); // 读取第i位同学的身高并存入heights数组,简称i为同学序号leftIncreasing[i] = 1;rightDecreasing[i] = 1;}// 从右往左,按左高右低顺序找出每一个位置右边有几个从高到低的数(包括自己)for (int i = numStudents - 1; i >= 1; i--) {for (int j = i + 1; j <= numStudents; j++) {if (heights[i] > heights[j] && leftIncreasing[i] <= leftIncreasing[j] + 1) {leftIncreasing[i] = leftIncreasing[j] + 1;}}}// 从左往右,按左低右高顺序找出每一个位置左边有几个从低到高的数(包括自己)for (int i = 2; i <= numStudents; i++) {for (int j = 1; j < i; j++) {if (heights[i] > heights[j] && rightDecreasing[i] <= rightDecreasing[j] + 1) {rightDecreasing[i] = rightDecreasing[j] + 1;}}}maxChorusSize = 0;// 计算每个位置左右序列合并后的合唱队形大小,并找出最大的合唱队形大小for (int i = 1; i <= numStudents; i++) {chorusSizes[i] = leftIncreasing[i] + rightDecreasing[i] - 1;// 注意!自己加了两次要 -1if (chorusSizes[i] > maxChorusSize) {maxChorusSize = chorusSizes[i];}}// 输出最少需要出列的同学数System.out.println(numStudents - maxChorusSize);scanner.close();}
}

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

http://www.ppmy.cn/news/1545312.html

相关文章

React中类组件和函数组件的理解和区别

react代码模块分为类组件和函数组件。 从语法和定义、内部状态管理、生命周期、性能、可读性和维护性、上下文、集成状态管理库等角度对比React中类组件和函数组件。 1、语法和定义 类组件&#xff1a; 使用 ES6 的类&#xff08;class&#xff09;语法定义的 React 组件。…

网页版五子棋——用户模块(服务器开发)

前一篇文章&#xff1a;网页版五子棋—— WebSocket 协议-CSDN博客 目录 前言 一、编写数据库代码 1.数据库设计 2.配置 MyBatis 3.创建实体类 4.创建 UserMapper 二、前后端交互接口 1.登录接口 2.注册接口 3.获取用户信息 三、服务器开发 1.代码编写 2.测试后端…

2024年网鼎杯青龙组|MISC全解

转载或摘抄时请标明出处 MISC01 wdbflag{22226aba1d98c4302a6f508cad7da5d8} MISC02 一把梭工具没有任何结果&#xff0c;估计缺少符号表&#xff0c;直接strings flag > out.txt导出后慢慢找线索 在桌面上发现了png和txt文件&#xff0c;用文件名做一次筛选 第一行发现bas…

【机器学习】机器学习回归模型全解析:线性回归、多项式回归、过拟合与泛化、向量相关性与岭回归的理论与实践

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

HarmonyOS-消息推送

一. 服务简述 Push Kit&#xff08;推送服务&#xff09;是华为提供的消息推送平台&#xff0c;建立了从云端到终端的消息推送通道。所有HarmonyOS 应用可通过集成 Push Kit&#xff0c;实现向应用实时推送消息&#xff0c;使消息易见&#xff0c;构筑良好的用户关系&#xff0…

数据结构 —— 红黑树

目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1&#xff1a;变色 2.2.2 情况2&#xff1a;单旋变色 2.2…

法语nous sommes

法语短语 “nous sommes” 的词源可以追溯到拉丁语&#xff0c;具体分析如下&#xff1a; 1. “Nous” 的词源&#xff1a; “Nous” 是法语中表示 “我们” 的人称代词&#xff0c;源自拉丁语的 “nos”&#xff0c;它表示 “我们” 的意思。 拉丁语 “nos” 是第一人称复数…

物联网核心安全系列——物联网安全需求

万物互联的物联网时代即将到来&#xff0c;越来越多的智能硬件厂商开始瞄准这一领域发力。智慧城市、智能出行、智慧生活、智能家居、智能机器人开始逐渐走入日常生活。到目前为止&#xff0c;智能硬件的安全问题尚未得到厂商与普通消费者的广泛关注。物联网不同于互联网&#…