week4-C - TT 的神秘礼物

2023-10-25 10:50
文章标签 神秘 礼物 week4 tt

本文主要是介绍week4-C - TT 的神秘礼物,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

TT 是一位重度爱猫人士,每日沉溺于 B 站上的猫咪频道。
有一天,TT 的好友 ZJM 决定交给 TT 一个难题,如果 TT 能够解决这个难题,ZJM 就会买一只可爱猫咪送给 TT。
任务内容是,给定一个 N 个数的数组 cat[i],并用这个数组生成一个新数组 ans[i]。新数组定义为对于任意的 i, j 且 i != j,均有 ans[] = abs(cat[i] - cat[j]),1 <= i < j <= N。试求出这个新数组的中位数,中位数即为排序之后 (len+1)/2 位置对应的数字,’/’ 为下取整。
TT 非常想得到那只可爱的猫咪,你能帮帮他吗?

Input

多组输入,每次输入一个 N,表示有 N 个数,之后输入一个长度为 N 的序列 cat, cat[i] <= 1e9 , 3 <= n <= 1e5

Output

输出新数组 ans 的中位数

Sample Input

4
1 3 2 4
3
1 10 2

Sample Output

1
8

思路

该题利用了二分答案P,枚举+二分计算P的名次的方法
复杂度为
在这里插入图片描述

怎样计算P的名次?

如果将X从小到大排列可以去绝对值。

那么计算𝑋𝑗−𝑋𝑖≤𝑃的二元组对数即可。

移项可得𝑋𝑗≤𝑋𝑖+𝑃, 𝑖<𝑗

枚举下标i然后计算满足条件的下标j的个数 也可以二分!

当然我们也可以换个角度来思考一下

想象存在这样一个数组,这个数组的前半部分全是1,后半部分全是0

这个数组可以有这样的含义

   如果a[i]=1,表明当p=i的时候,p的排名小于中位数如果a[i]=0,表明当p=i的时候,p的排名等于或大于中位数

在这里插入图片描述

R为最大可能的答案,在这个题中可以是数列B的最大值,也就是数列X中最大值和最小值的差

如果从这个角度来考虑的话,X就是我们要的答案

我们的任务变成了求这个数组中第一个0出现的位置


本题使用了二分答案和普通二分法,二分答案意味着找到答案的可行区间进行二分,可行区间内的点不一定都是满足条件的取值,但一定包括所有满足条件的取值。
step0 将所有数录入到数组ans中并按从小到大排序,这样后面的数一定会大于前面的数,作差时用后面的数减去前面的数即可得到绝对值

step1 用ans两头数相减作为max,0为min,在max和min之间进行二分,取p=(min+max)>>1,调用函数count(int p)计算ans中任意两值相减的绝对值中值<=p的个数,找到一个最小的p其count(int p)>=新数组长度的一半,该p即为所求中位数

step2 count(int p)中用i遍历ans数组,对i~n-1进行二分,找到最大的一个使ans[j]-ans[i]>=p的值,另sum+=(j-1),当i遍历完ans数组后,sum中存储的即为所求的ans中任意两值相减的绝对值中值<=p的个数。

错误

1、注意中位数的下标是新生成的数组的中位数,要先求出生成新数组的长度len,再用(len+1)/2得中位数的位置,不要错用成原数组的长度n,用(n+1)/2求。
2、其他两个错误注释在代码中。

代码

#include<iostream>
#include<algorithm>
using namespace std;
int ans[100000],n;
int count(int p)
{int sum=0;for(int i=0;i<n;i++)//可进行剪枝 {int l=i,r=n-1,j=-1;//注意这里r应该为n-1,若为n,可能二分时恰好为n,之后若再+1会越界 while(l<=r){int mid=(l+r)>>1;if(ans[mid]<=ans[i]+p){j=mid;l=mid+1;				}else r=mid-1;}if(j!=-1){sum+=(j-i);//注意j-i才是增加的绝对值个数,而非j+1 
//			cout<<"sum"<<sum<<endl;			}}return sum;
}
int main()
{while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++)scanf("%d",&ans[i]);sort(ans,ans+n);int max=ans[n-1]-ans[0],min=0,zw,len=n*(n-1)/2;
//		cout<<"len:"<<len<<endl;
//		cout<<max<<' '<<min<<endl;while(min<=max){int p=(min+max)>>1;
//			cout<<"p"<<p<<endl;
//			cout<<"count(p)"<<count(p)<<endl;if(count(p)>=(len+1)/2){zw=p;max=p-1;}else min=p+1;}printf("%d\n",zw);} return 0;
}

这篇关于week4-C - TT 的神秘礼物的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【网络安全的神秘世界】搭建dvwa靶场

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 下载DVWA https://github.com/digininja/DVWA/blob/master/README.zh.md 安装DVWA 安装phpstudy https://editor.csdn.net/md/?articleId=1399043

【网络安全的神秘世界】SQL注入漏洞

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 本章知识使用的靶场:DVWA 一、漏洞简介 SQL:结构化查询语言,是一种特殊的编程语言,用于数据库中的标准数据查询语言 SQL注入:简而言之就是,攻击者通过系统正常的输入数据的功能,输入恶意数据,而系统又未做任何校验或校验不严格,直接信任了用户输入,使得

TT-2014 研发笔试题

1 在一个单链表中,若p所指的结点不是最后结点,在p所指结点之后插进s所指结点,则应执行操作 () 【解析】 s->next=p->next;p->next=s 2 在下列排序方法中,不稳定的方法有() 【解析】 不稳定排序的意思是在排序过程中,相等的两个数比较之后不会改变其原来的位置,即不需要交换。 常见的稳定排序有: 冒泡排序,插入排序,归并排序,基数排序。 常见的不稳定排序有: 选择排序

【网络安全的神秘世界】关于Linux中一些好玩的字符游戏

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 佛祖保佑 把 motd 通过xtp拖到Linux中 liyang@Ubuntu2204:~$ cp motd /etc/motd #一定要放在etc下liyang@Ubuntu2204:~$ exit #退出,重新登录

【网络安全的神秘世界】渗透之信息收集流程

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 渗透测试之信息收集 切记:搜索到敏感信息之后,不要随意下载和传播,属于违法行为!应该主动进行报备 信息广度收集 whois信息 用于查看域名是否已经被注册,以及注册的详细信息 站长之家:http://whois.chinaz.com万商数源:http://ww

礼物道具功能投票小程序源码系统 PHP+MySQL组合开发 带完整的安装代码包以及搭建教程

系统概述 在移动互联网时代,小程序以其轻便、快速、无需安装的特点,成为越来越多企业和个人推广、互动、营销的重要工具。礼物道具功能投票小程序源码系统,基于PHP和MySQL组合开发,是一款功能强大、易于扩展的小程序后端支持系统。该系统不仅为小程序提供了礼物道具购买、赠送、使用的完整功能链,还集成了投票功能,使用户能够轻松发起、参与各类投票活动,极大地丰富了小程序的互动性和趣味性。 代码示例

【Cloudscapes V2】Blender商城10周年免费领取礼物超逼真的Vdb云和爆炸合集烟雾体积云字体符号轨迹火焰粒子

6月19号的限时免费领取插件挺牛的,可以在blender里渲染体积云、爆炸特效、火焰、烟雾等效果,非常逼真。 Blender商城10周年免费领取礼物:https://blendermarket.com/birthday Cloudscapes V2 - 超逼真的 Vdb 云和爆炸合集 CloudScapes 是 VDB 格式的 Blender 逼真的 3D 体积云库。它包括 18 种云和 3

【网络安全的神秘世界】AppScan安装及使用指南

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 https://www.hcl-software.com/appscan AppScan是一种综合型漏洞扫描工具,采用SaaS解决方案,它将所以测试功能整合到一个服务中,避免了因操作系统不同带来的安装问题 四个扫描模式: 动态分析(DAST)——黑盒扫描 动态的web扫描,爬取目标网站的接口

高叶恋情曝光神秘素人男友浮出水面

高叶恋情曝光,神秘素人男友浮出水面!在娱乐圈的璀璨星光中,总有一些低调而神秘的恋情,它们如同深藏的宝藏,等待着被发掘。昨日,知名娱乐记者刘大锤的一则爆料,犹如一颗重磅炸弹,炸响了整个娱乐圈,为我们揭开了一段瞩目的爱情故事。而这段恋情的主人公,正是凭借《狂飙》中“大嫂”一角而走红的女演员——高叶。据悉,刘大锤从2023年便开始追踪高叶的恋情线索,经过长时间的观察和取证,他终于拍到了这位神秘男友多次进

编程入门费用:揭开学习成本的神秘面纱

编程入门费用:揭开学习成本的神秘面纱 编程,这一曾被视为专业领域的技能,如今已逐渐走入大众视野。越来越多的人开始尝试学习编程,然而,对于初学者来说,编程入门费用无疑是一个重要的考虑因素。那么,编程入门究竟需要多少费用呢?本文将从四个方面、五个方面、六个方面和七个方面进行深入剖析,带您一起揭开学习成本的神秘面纱。 四个方面:编程学习资源的选择 学习编程的第一步是选择学习资源。不同的学习资源,其