[2021.11.14]UPC-2021级新生个人训练赛第3场-19283 Problem E 调研

2024-04-14 18:32

本文主要是介绍[2021.11.14]UPC-2021级新生个人训练赛第3场-19283 Problem E 调研,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

有一直线型展台共有 m 个展位,按该展位离入口处的远近顺序编号,其编号分别为 1、2、……、m;其中只有 n 个是展示新技术的展位,最后一个展示新技术的展位编号为 m。
这次调研分两个小组进行,每个小组最多调研连续的 10 个展位,且每个小组调研的展位至少相隔 2 个展位。 
乐乐希望你设计一种安排方案,使领导调研更多的展示新技术的展位。

输入

第一行只有一个正整数:n,表示展示新技术的展位数 
第二行共有 n 个正整数,依次表示新技术展位的编号

输出

只有一行且只有一个正整数:领导调研过的不同的新技术展位数 

样例输入 Copy

5  
1 3 12 21 8

样例输出 Copy

5

提示

对于 30%的数据,  1 <= n <= m <= 10 
对于 70%的数据,  1 <= n <= m <= 1 000 
对于 100%的数据, 1 <= n <= m <= 1 00 000

题解:

题目其实并不困难,但所给的信息实在是太不充分了,而且还有很多特殊情况,所以过的人很少....尤其是要注意考虑当M很小的时候(M<=10)的时候。

调研的时候,两个小组是必须都要参与的(输入中的m应该满足条件m>=4,这样才可保证两个小组都有展台可以调研),所以当输入是

4
1 2 3 4  时

最终调研的新技术展台数量是 2 

其中小组A只调研了1号展台,而小组B因为要与小组A相隔两个展台,所以只调研了4号展台。

我的做法是..用数组a[i]储存第i号展台的情况,如果是新技术展台,其值为1,否则其值为0。

然后第一小组调研数量是不定的,因为第一小组每多调研一个展台,第二小组所调研的展台就要往后退一个,而第二小组所调研的展台数量不受限制,那么当然是越多越好~ 

先把代码贴出来 ; )

#include <cstdio>
#include <algorithm>
using namespace std;
int main(){bool a[100010]={false}; // a数组表示展台状况。int  b[100010];    //b数组是前缀和,表示从1~下标i 的所有新技术展台数量。int  c[100010];      //c数组的作用在下面:)int n,i,j,mx=0,s1=0,cnt=100011,len=0,mx1=0;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&j);if(j>len)len=j;     //   len储存的是展台数量a[j]=true;}b[1]=a[1];for(i=2;i<=len;i++){b[i]=b[i-1]+a[i];}for(i=1;i+3<=len;i++){    //c数组储存的是从第二小组调研的新技术展台数量,if(i+12<=len)               //下标i表示的是第一小组调研的最后一个展台c[i]=b[i+12]-b[i+2];  elsec[i]=b[len]-b[i+2];    }for(i=1;i+3<=len;i++){    //i表示的是第一小组调研的起始展台for(j=i;j-i<=9&&j+3<=len;j++){     //j表示的是第一小组调研的结束展台s1+=a[j];if(s1>mx1) {               //mx1记录从1~j号展台中第一小组调研的新技术展台最大数。mx1 = s1;cnt = j;                //cnt用来记录第一小组调研新技术展台最多时的结束展台}if(j>=cnt)       //当第一小组调研结束展台大于等于调研新技术展台最多时的结束展台时if(mx<=mx1+c[j])    mx=mx1+c[j];if(mx<s1+c[j])    //因为第一小组调研新技术展台最多时,并不代表两个小组总共调研最多mx=s1+c[j];    //所以重复判断了一次}s1=0;}printf("%d",mx);return 0;
}

时间复杂度大概是O(n)..吧?,好繁琐。

感觉方法应该可以更简洁一点,我的有些臃肿了....

如有纰漏,请多多指正!!

这篇关于[2021.11.14]UPC-2021级新生个人训练赛第3场-19283 Problem E 调研的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903687

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

文章目录 技巧一模14.敏捷--方法--看板(类似卡片)1、 [单选] 根据项目的特点,项目经理建议选择一种敏捷方法,该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用以下哪种方法? 易错14.敏捷--精益、敏捷、看板(类似卡片)--敏捷、精益和看板方法共同的重点在于交付价值、尊重人、减少浪费、透明化、适应变更以及持续改善等方面。

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写