【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

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

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

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

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------