题解 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 ...
随机推荐
- Plastic Bottle Manufacturer - Consumer Demand For Plastic Bottles Becomes Higher
Since transparent containers enable consumers to clearly see the contents, consumers are increasingl ...
- opencv python:ROI 与 泛洪填充
提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ON ...
- Perl 笔记
目录 Perl 学习 常用记录 基础 1. 运行perl 2. 字符串 3. 变量 4. 条件 5. 循环 6. 运算符 7. 时间日期 8. 子程序(函数) 9. 引用 10. 格式化输出 11. ...
- 【代码总结】PHP面向对象之接口与多态性应用
概述: PHP之支持单继承,也就是说每个类智能继承一个父类.当声明的新类继承抽象类实现模板以后就不能再有其他问题,为了解决这个问题,PHP引用了接口 ------------------------- ...
- office 2016
Excel 2016: F4 : 重复上一步操作. 例子: 如果上一步是合并单元格, 则 再次选中其他几个单元格, F4即再次完成合并. 单元格中插入对角线: 选中单元格, 右键--设置单元格格式- ...
- [运维] 如何将 Linux 上的 nginx 变成 静态资源服务器 (二)
环境 虚拟机上运行 Linux centos 7 64 已经安装 nginx-1.16.1.tar.gz 具体的安装过程可以参考 https://www.cnblogs.com/unityworld ...
- tomcat8配置了tomcat-users.xml,报403 Access Denied
配置了tomcat-users.xml之后,重启tomcat服务,仍然访问拒绝. 原因:tomcat8.5 更改之后,仍然访问拒绝. 还需步骤如下: vi /usr/local/tomcat/apac ...
- 如何查看NXP产品的供货计划?
大的半导体厂商一般会提供每个产品的生命周期计划,NXP的工业级IC一般供货10年,汽车级是15年,具体的时间可以在官网查询得到. 首先,打开NXP官网链接 产品长期供货计划,可以看到以下页面 接着,筛 ...
- PAT A1131 Subway Map
dfs,选择最优路径并输出~ 这道题难度非常炸裂,要求完完整整自己推一遍,DFS才算过关!思路:一遍dfs,过程中要维护两个变量,minCnt 中途停靠最少的站.minTransfer需要换成的最少次 ...
- c++继承:公有、私有、保护(对应p12访问限制)
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...