博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P2580 于是他错误的点名开始了 题解
阅读量:4327 次
发布时间:2019-06-06

本文共 1996 字,大约阅读时间需要 6 分钟。

qwq!为什么!木有非结构体非指针的题解怎么阔以!所以, 我来辽~咻咻咻~  来分析, 我们可以先建一棵树,来存储整个名单, 然后再判断

for (int i = 1; i <= n; i++) {        root = 0;        cin >> ch;        int len = strlen (ch);        for (int j = 0; j < len; j++) {            int nu = ch[j] - 'a';            if (!tr[root][nu]) tr[root][nu] = ++tot;            root = tr[root][nu];        }        f[root] = 1;    }

 

这一段代码是具体的存储的过程, f数组用来存储整个单词被用过几次。可以自己分析品味一哈, 这个root变量到最后存储的其实就是您目前存储的单词的最后一个字母, 也就是代表了这个单词的结束, 所以直接用root这个变量来表示这个单词被用过几次即可。

for (int j = 0; j < len; j++) {            int nu = ch[j] - 'a';            if (!tr[root][nu]) {                printf ("WRONG\n");                break;            }            root = tr[root][nu];            if (j == len - 1 && f[root] == 2) printf ("REPEAT\n");            if (j == len - 1 && f[root] == 1) f[root] = 2,printf ("OK\n");         }

查询, 根据题目意思, 按要求输出, 并且要注意换行, 大写之类的细节性问题。要注意, 每一次判断到最后的时候, 判断是否是被用过, 没有被用过的, 需要标记表示应经用过了

再就是root这个变量每次都要更新(我真的调了好久)

完整代码:

#include 
#include
#include
using namespace std;char ch[800000];int n, m, tr[8000000][26], s, root, tot, f[8000000];int main () { scanf ("%d", &n); for (int i = 1; i <= n; i++) { root = 0; cin >> ch; int len = strlen (ch); for (int j = 0; j < len; j++) { int nu = ch[j] - 'a'; if (!tr[root][nu]) tr[root][nu] = ++tot; root = tr[root][nu]; } f[root] = 1; } scanf ("%d", &m); for (int i = 1; i <= m; i++) { root = 0; cin >> ch; int len = strlen (ch); for (int j = 0; j < len; j++) { int nu = ch[j] - 'a'; if (!tr[root][nu]) { printf ("WRONG\n"); break; } root = tr[root][nu]; if (j == len - 1 && f[root] == 2) printf ("REPEAT\n"); if (j == len - 1 && f[root] == 1) f[root] = 2,printf ("OK\n"); } } return 0;}

谢谢~

转载于:https://www.cnblogs.com/yanxiujie/p/11191685.html

你可能感兴趣的文章
oracle之三 自动任务调度
查看>>
Android dex分包方案
查看>>
ThreadLocal为什么要用WeakReference
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
nginx反向代理docker registry报”blob upload unknown"解决办法
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>
kibana的query string syntax 笔记
查看>>
旋转变换(一)旋转矩阵
查看>>
thinkphp3.2.3 bug集锦
查看>>
[BZOJ 4010] 菜肴制作
查看>>
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>