草稿箱,暂存,无用请忽略(12,对分)

文章包含多个使用二分查找算法的问题实例,如寻找数组中的特定值,判断是否存在特定键,以及在限定时间内完成任务的优化问题等。每个问题都通过二分查找来解决,关注于效率和边界条件的处理。
摘要由CSDN通过智能技术生成

140

n,m=map(int,input().split())
a=[]
for i in range(n):
    a.append(int(input()))
L=0
R=n-1
f=False
while L<=R and f==False:
    mid=(L+R)//2
    if m==a[mid]:
        f=True
    elif m>a[mid]:
        L=mid+1
    else:
        R=mid-1
if f==True:
    print("yes")
else:
    print("no")

141

def exist(key):
    L=0
    R=n-1
    while L<=R:
        m=(L+R)//2
        if key==a[m]:
            return True
        elif key>a[m]:
            L=m+1
        else:
            R=m-1
    return False

n=int(input())
a=[]
for i in range(1,n+1):
    a.append(int(input()))
m=int(input())
for i in range(m):
    key=int(input())
    if exist(key)==True:
        print("yes")
    else:
        print("no")
        
   

142

n=int(input())
a=[]
for i in range(n):
    a.append(int(input()))
key=int(input())
L=0
R=n-1
while L<=R:    #查找左端点
    m=(L+R)//2
    if key<=a[m]:
        R=m-1
    else:
        L=m+1
if a[L]!=key:
    print("no")
else:
    ansL=L  #保存左端点
    R=n
    while L<=R:  #查找右端点
        m=(L+R)//2
        if key<a[m]:
            R=m-1
        else:
            L=m+1
    if ansL==R:
        print(ansL)
    else:
        print(ansL,R)

143

import math
n=int(input())
L=0
R=2000000000
while L<=R:
    m=(L+R)//2
    if n>int(m*math.log10(m))+1:
        L=m+1
    else:
        R=m-1
print(L)

144

def check(x):
    tot=1
    s=0
    for i in range(n):
        if s+a[i]<=x:
            s=s+a[i]
        else:
            s=a[i]
            tot+=1
    if tot<=k:
        return True
    else:
        return False

n,k=map(int,input().split())
max=0
sum=0
a=[]
for i in range(n):
    a.append(int(input()))
    if a[i]>max:
        max=a[i]
    sum+=a[i]
while max<=sum:
    mid=(max+sum)//2
    if check(mid)==False:
        max=mid+1
    else:
        sum=mid-1
print(max)

145

def check(x):
    tot=0
    s=0
    for i in range(n):
        if s+a[i]<x:
            s+=a[i]
        else:
            s=0
            tot+=1
    if tot>=k:
        return True
    else:
        return False

n,k=map(int,input().split())
min=10000000
sum=0
a=[]
for i in range(n):
    a.append(int(input()))
    if a[i]<min:
        min=a[i]
    sum+=a[i]
while min<=sum:
    mid=(min+sum)//2
    if check(mid)==True:
        min=mid+1
    else:
        sum=mid-1
print(min-1)

146

high=[]
n,m=map(int,input().split())
left=0;right=0
for i in range(n):
    high.append(int(input()))
    if high[i]>right:
        right=high[i]
while left<=right:
    mid=(left+right)//2
    tmp=0
    for i in range(n):
        if high[i]>mid:
            tmp=tmp+high[i]-mid
    if tmp<m:
        right=mid-1
    else:
        left=mid+1
print(right)

147

#函数功能:检查能否在设定的时间内完成晾衣服的任务
def check(m):
    k=0
    for i in range(n):
        j=clothes[i]-a*m #如果不进烘干机 能减轻A*M的湿度
        if j<=0:continue #即已经干了
        y=j/b #如果没干,要进烘干机,y即为烘干时间
        if j%b!=0:y+=1
        k+=y #所有衣服烘干的时间
        if k<=m:
            return True
        else:
            return False

clothes=[]
n,a,b=map(int,input().split())
for i in range(n):
    clothes.append(int(input()))
left=0;right=max(clothes)
while left!=right:
    m=(left+right)//2
    if check(m):
        right=m
    else:
        left=m+1
print(left)

148

def judge(temp):
    sum=0
    for i in range(n):
        sum=sum+a[i]//temp
    return sum

a=[]
n,k=map(int,input().split())
for i in range(n):
    a.append(int(input()))
left=0;right=max(a)
while left<=right:
    m=(left+right)//2
    if judge(m)>=k:
        ans=m
        left=m+1
    else:
        right=m-1
print(ans)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值