这是题解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. 计算机基础,Python - Map和Reduce

    例子1. python中实现hashable def __hash__(self): hashes = map(hash, self.components) return functools.redu ...

  2. R - Fence Repair POJ - 3253

    Farmer John wants to repair a small length of the fence around the pasture. He measures the fence an ...

  3. 23 JavaScript规范与最佳实践&性能&箭头函数

    大多数web服务器(Apache等)对大小写敏感,因此命名注意大小写 不要声明字符串.数字和布尔值,始终把他们看做原始值而非对象,如果把这些声明为对象,会拖慢执行速度 对象是无法比较的,原始值可以 不 ...

  4. 17 JavaScript Cookies

    关于Cookie: Cookie是存储在电脑上的文本文件中的一些数据 Cookie致力于解决如何在连接关闭后记录客户单的用户信息 Cookie以键值对的形式存储,例如username=John Doe ...

  5. JS利用HTML5的Web Worker实现多线程

    需求:有一个长时间的斐波拉契的计算希望放在分线程中计算,计算的得到结果后再返回给主线程展示,再计算的时候不冻结页面 var number = 55;//传入分线程的参数 var worker = ne ...

  6. APDL获取节点和单元的结果

    目录 1. 获取节点结果 1.1 获取节点应力结果 1.2 获取节点位移结果 1.3 获取节点应变结果--总应变 1.4 获取节点应变结果--弹性应变 1.5 获取节点应变结果--塑性应变 1.6 获 ...

  7. Nginx安装部署!

    安装Nginx方法一:利用u盘导入Nginx软件包 二nginx -t 用于检测配置文件语法 如下报错1:配置文件43行出现错误 [root@www ~]# nginx -tnginx: [emerg ...

  8. Linux vim中方向键变成字母的问题

    使用Ubuntu Desktop 18.04 时 发现 vim 在编辑模式的时候,方向键变成了字母ABCD. 原因: Ubuntu预装的是vim tiny版本,安装vim full版本即可解决. 1. ...

  9. python中解方程

    from sympy import * import numpy as np from numpy import linalg # 方程中的符号 x = Symbol('x') # 计算 result ...

  10. 基于Goolgle最新NavigationDrawer实现全屏水平平移

    常见实现App 上面侧边栏菜单之前使用SlidingMenu,现在发现Goolgle原生NavigationDrawer也挺好用.但是细心的开发者们发现NavigationDrawer没有类似Slid ...