UVA-1392 DNA Regions(二分)

该博客主要介绍了如何解决UVA-1392题目的DNA Regions问题。利用二分查找算法,寻找两个序列中最长的子序列,使得两端序列不同字母的比例小于给定的百分比p%。博主详细阐述了思路,包括定义cnt[i]表示前i位置的不同元素计数,并提出关键判断条件,最后提供了满足条件的子序列的判断方法和AC代码。
摘要由CSDN通过智能技术生成

题目链接:https://vjudge.net/problem/UVA-1392

题目大意:给你两个长度为n的序列,n<=150000,要求在这两个序列的对应位置找出最长的子序列,满足这两端子序列中不同的字母所占比例小于p%。

思路:记cnt[i],表示从1到位置i,两端序列不同元素的个数。假设满足条件的子序列开始与结束位置分别为a,b(a<b,对于a==b情况可以采用特判,虽然我写的时候没考虑),则满足\frac{cnt[b]-cnt[a]}{b-a}<p/100,经过整理可得

对任意a<b,100*cnt[a]-p*a>100*cnt[b]-p*b

f[x]=100*cnt[x]-p*x,则对某个位置x,判断在它前面距离至少为len远处是否有大于它的值即可,这可以通过维护最大值数组实现。因此,通过二分长度len,在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值