week4 C - TT 的神秘礼物

2023-12-15 03:49
文章标签 神秘 礼物 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 的中位数

解题思路:

给出一个数组,然后根据这个数组构造一个新数组,求这个新数组的中位数,这里利用了二分答案的思想,即最开始中位数会有一个区间,中位数一定位于这个区间内,二分到一个可能答案jiashe,求该答案的名次,如果该名次比中位数的名次小,就在jiashe+1到r这个区间找,反之,在l到jiashe区间找,一直利用二分过程,直到low>high,循环结束此时的jiashe就是最终要求的中位数。
首先看,怎么求一个数的名次,根据新数组的构建方式ans[] = abs(cat[i] - cat[j]),1 <= i < j <= N,可知,要知道这个数大于等于ans[]数组的多少数,对数组cat进行排序,问题转化为即jiashe≥cat[j] - cat[i](1 <= i < j <= N) ,可以通过枚举i,二分j,即cat[j]<=cat[i]+jiashe,找到数组中最后一个<=cat[i]+jiashe的索引即可。为了避免不必要的搜索,优化剪枝,对于每一个jiashe,从数组中某个i开始,j从i+1到n-1会一直满足条件,所以先找到这个临界值,a[n-1]-a[i]<=jiashe,a[i]>=a[n-1]-jiashe,找到第一个大于该值的索引。问题转化为从i从0到这个临界值的枚举,然后二分搜索求j。

实验代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100100]; 			int BinarySearch(int goal,int left,int right) 		
{int l=left,r=right;int mid,ans=left-1;		while(l<=r){ mid=(r+l)/2;		 if(a[mid]>goal){r=mid-1;		}else				{ans=mid;l=mid+1;} }return (ans-left+1);	
}
int BinarySearch_bigger(int goal,int left,int right) 		 
{int l=left,r=right;int mid,ans=-1;		while(l<=r){ mid=(r+l)/2;		if(a[mid]<goal){l=mid+1;	}else				{ans=mid;r=mid-1;	} }return ans;		
}
int getAns(int n)
{long long int len=n*(n-1)/2;		long long int ansless=(len+1)/2 ;	int low=0,high=a[n-1]-a[0];			int jiashe;while(low<=high)		{	jiashe=(high+low)/2;	//二分答案if(low==high) return jiashe;			long long int mc=0;int end;if((end=BinarySearch_bigger(a[n-1]-jiashe,0,n-1))!=-1)		//找临界值 mc+=(n-end)*(n-end-1)/2;else	end=n-1;for(int i=0;i<end;i++)		{if(a[i+1]-a[i]<=jiashe) 	mc+=BinarySearch(jiashe+a[i],i+1,n-1);		}if(mc>=ansless)			high=jiashe;else if(mc<ansless)		low=jiashe+1;}
}
int main(void)
{int n;while(scanf("%d",&n)){//接下来要输入n个数 for(int i=0;i<n;i++)scanf("%d",&a[i]);		//输入数据 sort(a,a+n);printf("%d\n",getAns(n));}return 0;
}

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



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

相关文章

探索Python的数学魔法:Numpy库的神秘力量

文章目录 探索Python的数学魔法:Numpy库的神秘力量背景:为什么选择Numpy?Numpy是什么?如何安装Numpy?五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索Python的数学魔法:Numpy库的神秘力量 背景:为什么选择Numpy? 在Python的世界中,数据处理和科学计算是不可或缺的一部分。但原生Python在处理大规模数据时可能会显

【DL--01】深度学习 揭开DL的神秘面纱

什么是深度学习 深度学习=深度神经网络+机器学习 人工智能 > 机器学习 > 表示学习 > 深度学习 神经元模型 输入信号、加权求和、加偏置、激活函数、输出 全连接层 输入信号、输入层、隐层(多个神经元)、输出层(多个输出,每个对应一个分类)、目标函数(交叉熵) 待求的参数:连接矩阵W、偏置b 训练方法:随机梯度下降,BP算法(后向传播) Python中深度学习实现:Ke

【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱

1. 引言 随着技术的飞速发展,人工智能(AI)已从学术研究的实验室走向现实应用的舞台,成为推动现代社会变革的核心动力之一。而在这一进程中,深度学习(Deep Learning)因其在大规模数据处理和复杂问题求解中的卓越表现,迅速崛起为人工智能的最前沿技术。深度学习的核心是神经网络,它模仿了生物神经系统的工作原理,通过层层叠加的结构化模型,逐步从数据中学习到有用的特征,从而完成分类、识别、生

【中秋礼物推荐】南卡Runner Pro 5:安全聆听,健康相伴

中秋节,月圆人团圆,是中华民族的传统佳节。在这个寓意着团聚与和谐的节日里,选择一份既实用又贴心的礼物,无疑是表达心意的最佳方式。而南卡Runner Pro 5骨传导耳机,以其独特的设计和卓越的性能,成为了中秋节送礼的不二之选。 南卡Runner Pro 5延续了品牌的简约风格,白色为主色调的盒子给人以清新之感,而侧拉式的开启方式则增加了开箱的乐趣,让人迫不及待想要一探究竟。耳机的设计符合

驾驭Python与MySQL的桥梁:pymysql的神秘面纱

文章目录 **驾驭Python与MySQL的桥梁:pymysql的神秘面纱**背景:为何选择pymysql?库的简介安装指南简单的库函数使用方法场景应用常见问题与解决方案总结 驾驭Python与MySQL的桥梁:pymysql的神秘面纱 背景:为何选择pymysql? 在数据驱动的现代世界中,数据库是存储和检索信息的核心。Python,以其简洁和强大的特性,成为了数据

内存管理篇-17解开页表的神秘面纱-下

1.页表初探遗留问题-页表的创建过程 使用MMU之前,页表要准备好,怎么准备的?如何把物理内存通过section映射构建页表页表的创建过程分析:__create_page_tables--创建临时页表,然后在开启MMU 页表的大小和用途页表在内存中的地址页表的创建过程内核在上电的时候,MMU还没有开启,此时运行在物理内存(前期都是一些汇编指令,这些指令和相对地址无关)。C语言的函数都是编译链接成

墨兰:花语寓意、神秘传说与独特魅力全解析

在繁花似锦的植物世界中,墨兰宛如一位优雅的隐士,静静地散发着独特的魅力。它那婀娜的身姿和淡雅的芬芳,仿佛在诉说着一个个古老而神秘的故事。当我们凝视着墨兰,不禁会被它那独特的气质所吸引,想要探寻它背后隐藏的花语深意以及那些流传千古的动人传说。 接下来,让我们一同走进墨兰的奇妙世界,去揭开它那神秘的面纱。 一、墨兰的花语与寓意 墨兰的花语丰富多样,象征着娴静、青春永驻、高雅淡泊等美好品质

抖音礼物打印机

抖音礼物打印机 需要小票打印机一台 代码实现功能: 1、读取抖音直播间弹幕 2、打印出礼物 3、设定规则 可以设置规则 大于多少音浪才打印 4、小尾巴,可以在每条信息的后面,加上 自定义话术 带货话术、今日运势、笑话、算命 、计算抖音等级 等等功能 ```javapackage com.company;import java.io.UnsupportedEncodingException;

Python中的身份运算符:揭开“is”与“is not”的神秘面纱

引言 身份运算符在Python中主要用于比较两个变量是否指向同一个对象(即内存地址是否相同),而非比较它们的值是否相等。这一特性使其成为处理对象引用关系时不可或缺的工具。例如,在处理大型数据结构、内存管理或调试过程中,身份运算符能帮助我们更准确地理解程序的状态变化。 基础语法介绍 is 运算符 定义:用来检查两个对象是否是同一对象,即它们是否存储在同一块内存空间中。用法:表达式 A is

OpenAI神秘“草莓”项目 计划最早今年秋季推出

据科技媒体The Information报道,OpenAI神秘“草莓”项目,计划最早今年秋季推出!上个月,OpenAI的内部团队被曝出正开发的“草莓”(Strawberry)项目,目的是增强OpenAI的模型的推理能力,处理复杂科学和数学问题的能力,让大模型不仅能生成查询答案,还能提前规划,以便自主、可靠地浏览互联网,进行OpenAI 定义的“深度研究”。 奥特曼曾强调,今后AI发展的关键将围