题解 LG P2264
这是题解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的更多相关文章
- 题解【洛谷P2264】情书
题面 看到每一单词在同一句话中出现多次感动值不叠加,一眼想到 \(\text{set}\). 首先将词汇列表中的单词存储起来,我用的是 \(\text{set}\). 对于每一个句子的单词,我们可以先 ...
- 洛谷P2264 情书
P2264 情书 88通过 971提交 题目提供者lin_toto 标签字符串 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 yyy快把题目改回来 噫 这题的题目好逗啊... 情书std ...
- “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】
A -- simple math problem Time Limit:2s Memory Limit:128MByte Submissions:1599Solved:270 SAMPLE INPUT ...
- 算法(第四版)C# 习题题解——3.1
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...
- 算法(第四版)C# 习题题解——2.4
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...
- 算法(第四版)C# 习题题解——1.5
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- 十二省联考题解 - JLOI2019 题解
十二省联考题解 - JLOI2019 题解 两个T3的难度较大 平均代码量远大于去年省选 套路题考查居多 A 难度等级 1 $n^2$暴力可以拿到$60$分的优秀成绩 然后可以想到把区间异或转化为前缀 ...
- WC 2018 题解
WC 2018 题解 一些感受.jpg 题目难度相较前些年会相对简单一点?(FAKE.jpg 平均码量符合WC风格?(甚至更多一点 出题人良心! [WC2018] 通道 一个不知道对不对的$\log ...
- Nowcoder | [题解-N210]牛客OI月赛2-提高组
比赛连接戳这里^_^ 我才不会说这是我出的题(逃) 周赛题解\((2018.10.14)\) \(T1\) \(25\sim50\)分做法\(:\)直接爆搜 作为一个良心仁慈又可爱的出题人当然\(T1 ...
随机推荐
- 计算机基础,Python - Map和Reduce
例子1. python中实现hashable def __hash__(self): hashes = map(hash, self.components) return functools.redu ...
- R - Fence Repair POJ - 3253
Farmer John wants to repair a small length of the fence around the pasture. He measures the fence an ...
- 23 JavaScript规范与最佳实践&性能&箭头函数
大多数web服务器(Apache等)对大小写敏感,因此命名注意大小写 不要声明字符串.数字和布尔值,始终把他们看做原始值而非对象,如果把这些声明为对象,会拖慢执行速度 对象是无法比较的,原始值可以 不 ...
- 17 JavaScript Cookies
关于Cookie: Cookie是存储在电脑上的文本文件中的一些数据 Cookie致力于解决如何在连接关闭后记录客户单的用户信息 Cookie以键值对的形式存储,例如username=John Doe ...
- JS利用HTML5的Web Worker实现多线程
需求:有一个长时间的斐波拉契的计算希望放在分线程中计算,计算的得到结果后再返回给主线程展示,再计算的时候不冻结页面 var number = 55;//传入分线程的参数 var worker = ne ...
- APDL获取节点和单元的结果
目录 1. 获取节点结果 1.1 获取节点应力结果 1.2 获取节点位移结果 1.3 获取节点应变结果--总应变 1.4 获取节点应变结果--弹性应变 1.5 获取节点应变结果--塑性应变 1.6 获 ...
- Nginx安装部署!
安装Nginx方法一:利用u盘导入Nginx软件包 二nginx -t 用于检测配置文件语法 如下报错1:配置文件43行出现错误 [root@www ~]# nginx -tnginx: [emerg ...
- Linux vim中方向键变成字母的问题
使用Ubuntu Desktop 18.04 时 发现 vim 在编辑模式的时候,方向键变成了字母ABCD. 原因: Ubuntu预装的是vim tiny版本,安装vim full版本即可解决. 1. ...
- python中解方程
from sympy import * import numpy as np from numpy import linalg # 方程中的符号 x = Symbol('x') # 计算 result ...
- 基于Goolgle最新NavigationDrawer实现全屏水平平移
常见实现App 上面侧边栏菜单之前使用SlidingMenu,现在发现Goolgle原生NavigationDrawer也挺好用.但是细心的开发者们发现NavigationDrawer没有类似Slid ...