【UOJ 测试】C. 【#246 UER #7】套路(乱搞+枚举)

2023-10-04 22:40

本文主要是介绍【UOJ 测试】C. 【#246 UER #7】套路(乱搞+枚举),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C. 【UER #7】套路




反攻正在进行中,按照套路,跳蚤国将会很快获得最终的胜利。跳蚤国的情报局也没闲下来,他们正打算派遣一批“菲克蚤”前往跳晚国窃取有关三星 note7 的资料。

Fake Yang 是这批“菲克蚤”的教练,他教会他们各种 Fake 的技术,以便更好混入敌方内部。共  n n 只菲克蚤,由  1 1 到  n n 编号。Fake Yang 给每个菲克蚤都算了特征值  a1,,an a1,…,an,两个菲克蚤的相似度定义成这两个菲克蚤的特征值的差的绝对值,即第  i i 只菲克蚤与第  j j 只菲克蚤的相似度为  aiaj ∣ai−aj∣

现在这批菲克蚤排成一列在 Fake Yang 面前,Fake Yang 需要在其中选出一些菲克蚤合成一个行动小队。按照套路,他会选取连续一整段的菲克蚤  al,al+1,,ar al,al+1,…,ar。很显然,这个行动小队越大越好,但是按照套路,小队内的跳蚤最好都各不相同,假如有两只跳蚤长得很像的话很可能会引起跳晚们的怀疑。为此 Fake Yang 将小队的相似度定义为小队中的跳蚤两两之间的最小的相似度,用  s(l,r) s(l,r) 表示。

为保证安全,现在他想选取至少  k k 只跳蚤,且使得安全值最大。其中安全值定义如下:

但是,他并不知道最优解是什么,于是按照套路你需要帮助他求得这个值。

输入格式

按照套路,第一行三个正整数  n,m,k n,m,k k k 的意义如前所述, n n 表示跳蚤的只数。

接下来一行  n n 个整数,按照套路依次表示  n n 只跳蚤的特征值  a1,,an a1,…,an,保证  1aim 1≤ai≤m

输出格式

按照套路,一行一个整数,表示答案。

样例一

input
10 10 2
1 4 2 6 1 9 6 8 10 3
output
8
explanation

一种方案是选取区间[5,6],相似度为8,那么答案为(6-5)×8=8

限制与约定

由于一些原因,本题我们需要按照套路使用捆绑测试。每个子任务有若干个测试点,分为  5 5 个子任务,你只有通过一个子任务的所有测试点才能按照套路得到这个子任务的分数。

【题解】

【分成两部分来搞,然而为什么???窝不知道,感性的理解下伐。ATP和zyf说:不分开搞怎么保证时间复杂度。。。(好伐,貌似好有道理诶!)】

【题解上说:

【PART 1】【考虑k<=S的情况,一部分近乎暴力,i枚举的是有多少个跳蚤包含在小组里,j枚举的是当前小组的起点,每次用小组的最后一个元素减去第一个元素并与当前小组的最小差比较、更新(因为i从2开始枚举,前面的数之间的差都已经算过)】

【PART 2】【这一段是固定右边界和最小差值,寻找左边界,i枚举右边界,j枚举最小差值j+1。每次用已固定的右边界的值上下浮动j,查找最大区间 】

#include<cstdio>
#include<cstring>
#include<algorithm>
#define S 500
using namespace std;
int a[200010],n,m,k,ans;
int r[200010],f[200010],l[200010];
inline int abss(int x)
{if(x>=0) return x;return -x;
}
int main()
{int i,j;scanf("%d%d%d",&n,&m,&k);for(i=1;i<=n;++i) scanf("%d",&a[i]);memset(f,127,sizeof(f));for(i=2;i<=S;++i)for(j=1;j+i-1<=n;++j){int x=abss(a[i+j-1]-a[j]);f[j]=(f[j]<f[j+1]?f[j]:f[j+1]); f[j]=(f[j]<x?f[j]:x);if(i>=k) ans=max(ans,f[j]*(i-1));}//PART 1int N=(k>S?k:S);for(i=1;i<=n;++i){for(j=0;j<=S;++j){int x=(j==0?0:l[j-1]);l[j]=(l[j]>x?l[j]:x);if(a[i]-j>=1) l[j]=(l[j]<r[a[i]-j]?r[a[i]-j]:l[j]);if(a[i]+j<=m) l[j]=(l[j]<r[a[i]+j]?r[a[i]+j]:l[j]);if(i-l[j]>=N) ans=max(ans,(i-l[j]-1)*(j+1));}r[a[i]]=i;//因为在超过N的区间大小里可能有重复元素,所以要每次尽量将最右端右移,这样可以使下一次枚举区间时满足条件的区间尽量大 } //PART 2 printf("%d\n",ans);return 0;
}


这篇关于【UOJ 测试】C. 【#246 UER #7】套路(乱搞+枚举)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi