2020-2021学年算法分析与设计期中考试(分治+动态规划)

A 任老师的单词纠错(分治)

Description

任老师是广东外语外贸大学第一个省级文科重点实验室语言工程与计算实验室的研究员。他致力于自然语言处理研究。任老师在自然语言处理的研究过程中需要对英文文本进行预处理,利用字典找出文章中有多少个拼写错误的单词。如果你对自然语言处理比较感兴趣,请先帮任老师高效地解决这个问题吧。算法复杂度要求为O(logN)

Input

第一行一个数字n,0 < n < 100000,表示字典的单词数。
后面n行,每行表示字典里的一个单词。单词按照从小到大的顺序排序。
接下来一个数字m,表示英文文章的长度。
后面m行,0 < m < 100000,每行表示文章里的一个单词

Output

一个数字,表示有多少个单词拼写错误

Sample Input 1

5
a
book
is
that
this
4
this
iz
a
book

Sample Output 1

1

thinking

  • 考点:二分搜索,时间复杂度为 log n
  • 变形:将数字顺序变为字典序,方法一样。
  • 题意:计算找不到的个数

code


#include<iostream>

using namespace std;
int n;
string s[100001];
int m;
int ans = 0;

//二分搜索
int find(int l, int r, const string& a) {
    if (l < r - 1) {
        int mid = (l + r) / 2;
        //根据字典序进行比较
        if (a < s[mid]) find(l, mid, a);
        else if (a > s[mid]) find(mid, r, a);
    } 
    //查不到答案累加器就加 1
    else if (s[l] != a && s[r] != a) ans++;
    return 0;
}

int main() {
    string a;
    cin >> n;
    for (int i = 0; i 
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值