我是靠谱客的博主 要减肥苗条,最近开发中收集的这篇文章主要介绍uoj套路题目传送门,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目传送门

暴 力 很 好 打 暴力很好打
有没有人性,才给7分!!!
看 了 一 下 没 有 给 太 大 的 值 域 , 显 然 是 要 从 值 域 着 手 看了一下没有给太大的值域,显然是要从值域着手
对 于 子 任 务 3 ( 和 正 解 有 关 ) 可 以 用 一 个 d p 解 决 对于子任务3(和正解有关)可以用一个dp解决 3dp
d p [ i ] [ j ] 表 示 以 i 为 左 端 点 , j 为 右 端 点 的 最 小 的 差 值 dp[i][j]表示以i为左端点,j为右端点的最小的差值 dp[i][j]ij
d p [ i ] [ j ] = M i n ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] , a b s ( a [ j ] − a [ i ] ) ) dp[i][j]=Min(dp[i-1][j],dp[i][j-1],abs(a[j]-a[i])) dp[i][j]=Min(dp[i1][j],dp[i][j1],abs(a[j]a[i]))
对 于 子 任 务 4 , 可 以 根 据 抽 屉 原 理 , 对 于 小 于 m 区 间 直 接 的 直 接 暴 力 , 大 于 的 直 接 输 出 0 ( 因 为 值 域 , 还 是 整 数 , 肯 定 有 两 个 值 相 同 ) 对于子任务4,可以根据抽屉原理,对于小于m区间直接的直接暴力,大于的直接输出0(因为值域,还是整数,肯定有两个值相同) 4m0()
根 据 抽 屉 原 理 , 很 显 然 可 以 发 现 一 个 结 论 : 如 果 一 个 区 间 的 长 度 为 x , 那 么 最 小 差 值 不 超 过 m / x 根据抽屉原理,很显然可以发现一个结论:如果一个区间的长度为x,那么最小差值不超过m/x xm/x
根 据 这 个 原 理 , 可 以 直 接 将 答 案 分 开 统 计 , 对 于 区 间 小 于 m 的 直 接 用 子 任 务 3 的 方 法 统 计 根据这个原理,可以直接将答案分开统计,对于区间小于sqrt m的直接用子任务3的方法统计 m 3
对 于 大 于 m , 可 以 发 现 相 减 值 域 是 一 个 比 较 小 的 值 , 从 这 方 面 下 手 对于大于sqrt m,可以发现相减值域是一个比较小的值,从这方面下手 m
r [ i ] 表 示 i 这 个 值 出 现 的 最 大 的 坐 标 , c h [ i ] 表 示 差 值 为 i 的 最 大 坐 标 r[i]表示i这个值出现的最大的坐标,ch[i]表示差值为i的最大坐标 r[i]ich[i]i
枚 举 右 端 点 , 这 两 个 就 很 好 转 移 了 , 具 体 看 代 码 枚举右端点,这两个就很好转移了,具体看代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
#define ll long long
int n,m,k,a[N],s,r[N];
int ch[N];ll f[N],ans;
int main()
{
	freopen("blueming.in","r",stdin);
	freopen("blueming.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	memset(f,127,sizeof(f));
	for(int i=1;i<=n;i++)
	  scanf("%d",&a[i]);
	s=floor(sqrt(m));
	for(int i=2;i<=s;i++)
	  for(int j=1;j+i-1<=n;j++){
		f[j]=min(f[j],min(f[j+1],1ll*abs(a[j]-a[j+i-1])));
		if(i>=k)ans=max(ans,f[j]*(i-1));
      }
    for(int i=1;i<=n;i++){
    	int up=m/s;
    	for(int j=0;j<=up+1;j++){
    		ll u=a[i]+j,v=a[i]-j;
    		if(j>=1)ch[j]=max(ch[j],ch[j-1]);
    		if(u<=m)ch[j]=max(ch[j],r[u]);
    		if(v>=1)ch[j]=max(ch[j],r[v]);
    		if(i-ch[j]+1>max(s,k))ans=max(ans,1ll*(i-ch[j]-1)*(j+1));
		}r[a[i]]=i;
	}
    printf("%lld",ans);return 0;
}

最后

以上就是要减肥苗条为你收集整理的uoj套路题目传送门的全部内容,希望文章能够帮你解决uoj套路题目传送门所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部