这是题解P2264

先讲一下Trie,其实Trie也名前缀树,就是说:如果Trie中某串是某串的前缀,那么我们可以共用这个串也就是这样:

插入h、hk、jc,jcfa

那么,h节点会给h和hk共用,jc串也会给jcfa共用。

对于本题来说,因为要考虑每个句子后要标记次数,所以Trie要有附加数组。

拿样例为例,我们原本会构建这样的一棵TRIE树:

但我们只要在底下最后一个点附加一个val数组来记录次数,因为要记录次数。

那么trie就沉了这样:

int ch[N][C],tot=1;
int check[N];

怎么写也就更简单了:

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
#define N 50005
#define rr register
#define C 27
string s,w;
int n;
int ch[N][C],tot=,ans;
string w1[N];
int check[N];
int idx(char s);
void insert(string s);
int find(string s);
char turn(char x);
int main()
{
cin>>n;
for(rr int i=;i<=n;i++)
{
cin>>w1[i];
for(rr int j=;j<=w1[i].size()-;j++)
w1[i][j]=turn(w1[i][j]);
insert(w1[i]);
}
int len;
getchar();
getline(cin,s);
len=s.size()-;
for(rr int i=;i<=len;i++)
{
s[i]=turn(s[i]);
if(s[i]=='.' or s[i]==',' or s[i]==' ')
{
if(find(w)==)
ans++;
if(s[i]=='.')
for(rr int j=;j<=n;j++)
insert(w1[j]);
w="";
}
else
w+=s[i];
}
cout<<ans;
return ;
}
int idx(char x)
{
int v;
v=(int)(x-'a');
return v;
}
void insert(string s)
{
int len=s.size()-;
int las=,w;
for(rr int i=;i<=len;i++)
{
w=idx(s[i]);
if(ch[las][w]==)
ch[las][w]=++tot;
las=ch[las][w];
}
check[las]=;
return;
}
int find(string s)
{
int len=s.size()-;
int las=,w;
for(rr int i=;i<=len;i++)
{
w=idx(s[i]);
if(ch[las][w]==)
return ;
las=ch[las][w];
}
if(check[las]==)
{
check[las]++;
return ;
}
else return ;
}
char turn(char x)
{
if(x>='A'&&x<='Z') return (x+);
else return x;
}

Update 2020.2.14 祝大家情人节快乐!

二分答案:

N方过百万,暴力碾标程

这是对不会STL+Trie的福音。

这是P2264的第2种做法。

我们想一下,题目中说了有N个可以加好感度的字符串。

众所周知,我们只需要按字典序排好序,那么N个字符串就会呈单调上升。

单调上升的话,我们就可以进行二分查找是否可以加好感度。

而二分查找的时间是logn,整个程序的时间就是O(Slogn)

其中S是字符串长度。

题解 LG P2264的更多相关文章

  1. 题解【洛谷P2264】情书

    题面 看到每一单词在同一句话中出现多次感动值不叠加,一眼想到 \(\text{set}\). 首先将词汇列表中的单词存储起来,我用的是 \(\text{set}\). 对于每一个句子的单词,我们可以先 ...

  2. 洛谷P2264 情书

    P2264 情书 88通过 971提交 题目提供者lin_toto 标签字符串 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 yyy快把题目改回来 噫 这题的题目好逗啊... 情书std ...

  3. “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】

    A -- simple math problem Time Limit:2s Memory Limit:128MByte Submissions:1599Solved:270 SAMPLE INPUT ...

  4. 算法(第四版)C# 习题题解——3.1

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...

  5. 算法(第四版)C# 习题题解——2.4

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...

  6. 算法(第四版)C# 习题题解——1.5

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  7. 十二省联考题解 - JLOI2019 题解

    十二省联考题解 - JLOI2019 题解 两个T3的难度较大 平均代码量远大于去年省选 套路题考查居多 A 难度等级 1 $n^2$暴力可以拿到$60$分的优秀成绩 然后可以想到把区间异或转化为前缀 ...

  8. WC 2018 题解

    WC 2018 题解 一些感受.jpg 题目难度相较前些年会相对简单一点?(FAKE.jpg 平均码量符合WC风格?(甚至更多一点 出题人良心! [WC2018] 通道 一个不知道对不对的$\log ...

  9. Nowcoder | [题解-N210]牛客OI月赛2-提高组

    比赛连接戳这里^_^ 我才不会说这是我出的题(逃) 周赛题解\((2018.10.14)\) \(T1\) \(25\sim50\)分做法\(:\)直接爆搜 作为一个良心仁慈又可爱的出题人当然\(T1 ...

随机推荐

  1. Plastic Bottle Manufacturer - Consumer Demand For Plastic Bottles Becomes Higher

    Since transparent containers enable consumers to clearly see the contents, consumers are increasingl ...

  2. opencv python:ROI 与 泛洪填充

    提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ON ...

  3. Perl 笔记

    目录 Perl 学习 常用记录 基础 1. 运行perl 2. 字符串 3. 变量 4. 条件 5. 循环 6. 运算符 7. 时间日期 8. 子程序(函数) 9. 引用 10. 格式化输出 11. ...

  4. 【代码总结】PHP面向对象之接口与多态性应用

    概述: PHP之支持单继承,也就是说每个类智能继承一个父类.当声明的新类继承抽象类实现模板以后就不能再有其他问题,为了解决这个问题,PHP引用了接口 ------------------------- ...

  5. office 2016

    Excel 2016: F4  : 重复上一步操作. 例子: 如果上一步是合并单元格, 则 再次选中其他几个单元格, F4即再次完成合并. 单元格中插入对角线: 选中单元格, 右键--设置单元格格式- ...

  6. [运维] 如何将 Linux 上的 nginx 变成 静态资源服务器 (二)

    环境 虚拟机上运行 Linux centos 7 64 已经安装 nginx-1.16.1.tar.gz  具体的安装过程可以参考 https://www.cnblogs.com/unityworld ...

  7. tomcat8配置了tomcat-users.xml,报403 Access Denied

    配置了tomcat-users.xml之后,重启tomcat服务,仍然访问拒绝. 原因:tomcat8.5 更改之后,仍然访问拒绝. 还需步骤如下: vi /usr/local/tomcat/apac ...

  8. 如何查看NXP产品的供货计划?

    大的半导体厂商一般会提供每个产品的生命周期计划,NXP的工业级IC一般供货10年,汽车级是15年,具体的时间可以在官网查询得到. 首先,打开NXP官网链接 产品长期供货计划,可以看到以下页面 接着,筛 ...

  9. PAT A1131 Subway Map

    dfs,选择最优路径并输出~ 这道题难度非常炸裂,要求完完整整自己推一遍,DFS才算过关!思路:一遍dfs,过程中要维护两个变量,minCnt 中途停靠最少的站.minTransfer需要换成的最少次 ...

  10. c++继承:公有、私有、保护(对应p12访问限制)

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...