当前位置: 首页 > news >正文

LQ0100 人物相关性分析【文本处理】

题目来源:蓝桥杯2019初赛 C++ C组I题

问题描述
小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob 有多少次同时出现。
更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:
在小说文本 中 Alice 和 Bob 之间不超过 K 个字符。
例如以下文本:
This is a story about Alice and Bob. Alice wants to send a private message to Bob.
假设 K = 20,则 Alice 和 Bob 同时出现了 2 次,
分别是”Alice and Bob” 和”Bob. Alice”。
前者 Alice 和 Bob 之间有 5 个字符,后者有 2 个字符。
注意:
1.Alice 和 Bob 是大小写敏感的,alice 或 bob 等并不计算在内。
2.Alice 和 Bob 应为单独的单词,前后可以有标点符号和空格,但是不能 有字母。
例如 Bobbi 並不算出现了 Bob。

输入格式
第一行包含一个整数 K。
第二行包含一行字符串,只包含大小写字母、标点符号和空格。长度不超 过 1000000。

对于所有评测用例,1≤ K ≤1000000。

输出格式
输出一个整数,表示 Alice 和 Bob 同时出现的次数。

样例输入
20
This is a story about Alice and Bob. Alice wants to send a private message to Bob.

样例输出
2

问题分析
文本处理问题,不解释。

AC的C语言程序如下:

/* LQ0100 人物相关性分析 */

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define N 1000000
char a[N + 1];
int len;
int pos1[N / 5], pos2[N / 3];

int isLetter(int n)
{
    if (n < 0 || n >= len) return 0;
    return isalpha(a[n]);
}

int main()
{
    int k;
    fgets(a, N, stdin);
    sscanf(a, "%d", &k);
    fgets(a, N, stdin);
    for (len = 0; a[len] != '\n'; len++);
    a[len++] = '\0';

    int cnt1 = 0, cnt2 = 0;
    for (int i = 0; a[i]; i++) {
        if (!isLetter(i - 1) && strncmp(a + i, "Alice", 5) == 0 && !isLetter(i + 5))
            pos1[cnt1++] = i, i += 5;
        if (!isLetter(i - 1) && strncmp(a + i, "Bob", 3) == 0 && !isLetter(i + 3))
            pos2[cnt2++] = i, i += 3;
    }

    long long ans = 0;
    if (cnt1 != 0 && cnt2 != 0) {
        int l = 0, r = 0;
        for (int i = 0; i < cnt1; i++) {
            while (l < cnt2 && pos2[l] < pos1[i] - k - 3)
                l++;
            while (r < cnt2 && pos2[r] <= pos1[i] + k + 5)
                r++;
            ans += r - l;
        }
    }

    printf("%lld\n", ans);

    return 0;
}

相关文章:

  • 使用Tortoise 创建远程分支
  • casa学习代码记录
  • 018基于SSM的音乐系统网站
  • 学习前端二十八天(数组方法)
  • 神经网络的激活函数
  • 将游戏界面与注册/登录界面连接到一起
  • Redis 协议与异步方式
  • c++实现栈和队列类
  • 学习JAVA的第四天(基础)
  • SQL Server添加用户登录
  • 回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测
  • unity 场景烘焙中植物叶片(单面网络)出现的白面
  • 虚拟形象制作该如何进行?带你深入了解虚拟形象制作
  • 一文读懂TDengine3.0中的事务机制
  • Java入门刷题篇 基础语法->>基本数据类型->>Java1类型转换
  • 入门学python(三)
  • 湖北住建厅七大员报考条件和取证流程
  • 字节码指令 || JVM类加载与字节码技术
  • 哪个开源工作流引擎更好?Flowable or Camunda ?
  • 牛客网专项练习30天Pytnon篇第17天
  • 【Vue】Vue全家桶(九)Vue3
  • #php 递归获取下级元素#
  • 使用 userdel 命令删除 Linux 中的用户
  • Docker部署Archery(v1.9.1)
  • jvm相关知识详解
  • AI(七)基础
  • CANalyst—Ⅱ 连通与手动收发测试、python收发测试
  • 类和对象基础(C++)
  • Maven简介、安装、使用、依赖传递
  • 11.MongoDB系列之连接副本集
  • 电子与电路复习题重点大题(附答案)
  • 【精品】seata综合示例:订单-库存-扣款