科丁博士能出牌吗

题目描述

科丁星人的进化程度远远领先于地球人,他们的扑克牌也和地球上的扑克牌不一样。科丁星的扑克牌有10^9 种牌,牌上的数字分别从1到10^9 (没有J Q K和大小王)。不像我们地球人每种牌有4张,科丁星的扑克牌每种牌有8张,也就是说科丁星的每副牌有8*10^9 张。科丁星打牌的规则也是牌面上数字越大的牌越厉害。
科丁博士很喜欢打牌,他的牌打的也很好。今天科丁博士又约了实验室的同事一起打牌。科丁博士习惯于按照从左到右,从小到大的顺序拿牌。科丁博士的这一局已经开始了一段时间,科丁博士现在手上有n张牌。科丁博士还是按照他一贯的喜好进行拿牌。科丁博士的上家出了4张x, 现在轮到科丁博士出牌了,如果科丁博士手上所有大于x的牌中有某种牌不少于4张,那么科丁博士就可以压过上家,请你帮助科丁博士算一算他手上的牌能否压过上家? (1≤ n,≤10^6, 1≤ x,≤10^9)。

输入格式

第1行:两个整数n, x(分别代表科丁博士手上牌的数量和科丁博士上家出牌的大小)
第2到第n+1行, n个整数,分别代表科丁博士手上的牌。

输出格式

一行:如果科丁博士能压过上家输出1,否则输出0

输入输出样例

输入样例1:

6 5

1

10

10

10

10

10

输出样例1:
1
输入样例2:
5 10
1
3
10
10
10
输出样例2:
0

 【耗时限制】1000ms 【内存限制】128MB

理解方法

二分查找是一种在有序数组中快速定位目标元素的算法。在进行二分查找时,我们可以设置上下界来缩小查找区间,从而提高查找效率。

上下界的意义是确定了一个查找区间,目标元素只可能在这个区间内。通过不断缩小查找区间,我们可以将查找范围从整个数组缩小到最终只剩下一个元素,从而找到目标元素。

在二分查找中,上界和下界的设置非常重要。如果上界太大或下界太小,会导致查找区间过大,降低查找效率;如果上界太小或下界太大,可能导致目标元素不在查找区间内,无法找到目标。

因此,在进行二分查找时,需要根据具体问题设置合适的上下界,以保证查找的有效性和高效性。

代码展示

#include<bits/stdc++.h>
using namespace std;
int a[1000010];
int up(int l,int r,int x){
	while(l<r){
		int mid=(l+r)/2;
		if(a[mid]>x) r=mid;
		else l=mid+1;
	}
	return l;
}
int low(int l,int r,int x){
	while(l<r){
		int mid=(l+r)/2;
		if(a[mid]>=x) r=mid;
		else l=mid+1;
	}
	return l;
}
int main(){
	int n,x;
	cin>>n>>x;
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	int p=low(1,n+1,x+1);
	for(int i=p;i<=n;i++){
		int s=low(1,n+1,a[i]);
		int t=up(1,n+1,a[i]);
		if(t-s>=4){
			cout<<1;
			return 0;
		}

	}
	cout<<0;
	return 0;
}

希望大家喜欢(❤ ω ❤)

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值