名侦探“柯南”(c++)(二分)

文章介绍了一个关于犯罪侦查的编程挑战,其中涉及到二分查找算法的应用。给定犯罪嫌疑人的身高序列和目击证人提供的身高描述,程序需要快速找出匹配的嫌疑人。通过二分查找优化搜索效率,处理可能存在的身高精度问题,并对特殊情况如无匹配身高做出相应输出。
摘要由CSDN通过智能技术生成

题目描述

C市有n名犯罪嫌疑人被叫到公安局问话,有m名目击证人描述了罪犯的身高,经公安局核实,目击证人提供的身高与罪犯实际身高略有误差(目击证人提供的身高是最接近实际身高,且实际身高≤目击者提供身高)。现公安局将所有n名犯罪嫌疑人按身高从低到高站成一排(n个人身高各不相同),并把目击者提供的m个身高都给你,请你快速帮公安局找到罪犯。

输入格式

输入共m+2行 第1行:n,m(m<n≤100000) 第2行:n个嫌疑人的身高(小数点后两位),用空格隔开 后m行:每行1个数,代表目击者提供的1个身高(小数点后两位) 此题可输入1个参考身高输出1名罪犯信息

输出格式

m行,每行两个数,真实罪犯的排序编号和他的身高(用空格隔开) 若提供的身高找不到罪犯,该行输出“NO”

样例

样例输入 1

5 3
1.68 1.70 1.75 1.84 1.86
1.85
1.75
1.68

样例输出 1

4 1.84
3 1.75
1 1.68

样例输入 2

5 3
1.68 1.71 1.74 1.93 1.94
1.72
1.73
1.67

样例输出 2

2 1.71
2 1.71
NO

分析:

       输入就不用说了,因为样例可以输入一个身高,输出一个嫌疑人身高,所以我就不统一输出,如果要统一输出的话,先用数组保留数据,最后统一for循环输出。接下来我们来看该如何找出犯人,我们可以用二分来节省找犯人用的时间复杂度,那该如何正确的写出缩短二分范围的代码呢?因为嫌疑人身高为单调递增的,所以我们要找到在小于等于目击者提供身高的所有嫌疑人身高中的最大的那一个,那我们是二分什么呢?应该是嫌疑人身高,所以设变量l和r那是不是二分到比目击者提供身高高的嫌疑人身高就减小r呢?是的,但如果找到了比目击者提供身高矮或一样高的就要缩短l的范围,而不是直接输出嫌疑人的身高。最后要输出l和a[l],但要注意如果目击者提供身高比最矮的哪一位嫌疑人的身高还要矮,就输出NO。还有,因为身高都是两位小数,有精度问题,所以把身高变成long long型。

代码:

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100005];
double v;
int main(){
	scanf("%d %d",&n,&m);
	for(long long i=1;i<=n;i++){
		scanf("%lf",&v);
		a[i]=v*1000;//因为是两位小数,有精度问题,把它变成longlong型
	}
	for(long long i=1;i<=m;i++){
		scanf("%lf",&v);
		long long x=v*1000;//x为变成longlong型的目击者提供身高
		long long l=0,r=n+1;//要设0和n+1,不然有极端情况
		while(l<r-1){
		    long long mid=(l+r)/2;
		    if(a[mid]<=x){
			    l=mid;
		    }
		    else{
			    r=mid;
		    }
	    }//二分嫌疑人身高
	    if(x<a[1]){
	    	cout<<"NO"<<endl;//输出NO
		}
		else{
			printf("%lld %.2lf \n",l,a[l]/1000.0);//把a[l]变成小数
		}
	}
	return 0;
}

求赞!!!!!!!!!!!!!!!!!!!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
作为一部长寿动漫,《侦探柯南》已经陪伴了许多观众度过了十几年的时光。这部动漫中的每个角色都有着自己的独特性格与故事,其中最为引人注目的当然是主人公柯南·爱德华·谷山。作为一十七岁的高中生,他被不为人知的黑暗组织毒害,身体变成了小学生模样。为了寻找解药,他开始了自己的侦探之旅,帮助警方破案,同时也在一步步揭开黑暗组织的真相。 首先要说的是,《侦探柯南》的剧情非常紧凑,每一集都是一个完整的案件,而这些案件又都和黑暗组织有关。在每个案件中,柯南和他的小伙伴们都会遇到各种各样的险情,他们需要通过一系列的推理和侦查来破解谜团,最终找出凶手。这种紧凑的剧情安排让观众一集接着一集地看下去,一不小心就会看了好几集。 其次,剧中的人物形象非常鲜明,每个角色都有着自己的特点和故事背景。柯南是一个机智勇敢、聪明伶俐的小侦探,他总是能够通过一些细节来发现案件的真相。小兰是柯南的青梅竹马,也是他最亲密的小伙伴,她的聪明和勇气在柯南侦探旅程中也起着重要的作用。还有一众警察和侦探,他们每个人都有着自己的性格和技能,为故事增添了许多色彩。 最后,也是最重要的一点,是剧中的推理和解谜环节。每一集的推理都是非常经典的,通过一系列的线索和证据,柯南和他的小伙伴们逐步推理出案件的真相,给观众留下了深刻的印象。而且,每一集的结尾都有一个惊人的献艺,让观众们对接下来的剧情充满期待。 总之,作为一部长寿动漫,《侦探柯南》的成功之处在于它紧凑的剧情、鲜明的人物形象和经典的推理和解谜环节。它的故事情节吸引着观众,让他们一集接着一集地看下去。它的人物形象让观众们印象深刻,他们在剧中的表现也都非常精彩。最重要的是,它的推理和解谜环节让观众们充满了期待和惊喜,让他们更加热爱这部动漫。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值