单词背诵【Hash】【二分】【尺取法】

>Link

luogu P1381

ybtoj单词背诵


>解题思路

基本思路:
先计算每个单词的哈希值,找出最多能包含的单词数,即ans1
然后在用尺取法,设当前选择的区间为[l,r]:

  1. 依次枚举 l l l的位置
  2. r r r l l l开始一个个向后挪,直到挪到 [ l , r ] [l,r] [l,r]中有ans1个不同单词(或边界外)
  3. 更新ans
  4. l l l向右移一位,删除原本 l l l上的单词
  5. 再从步骤一开始,循环下去

hash值有重合,如何快速找到当前这个单词是否在需要背的单词表中?
#1 邻接表 把hash值一样的放在同一个表中,寻找时在表中一个个找是否存当前单词
#2 二分 把需要背的单词表按照每个单词的hash值从小到大排个序,寻找当前单词时按照hash值二分查找

因为第一个方法之前打过了,所以下面只写了第二种方法(其实我觉得第二种方法更简单^)


>代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100010
#defin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值