P3370 【模板】字符串哈希

题目描述

如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字、大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串。

#友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转PJ试炼场:)

输入格式

第一行包含一个整数N,为字符串的个数。

接下来N行每行包含一个字符串,为所提供的字符串。

输出格式

输出包含一行,包含一个整数,为不同的字符串个数。

输入输出样例

INPUT:
  5
abc
aaaa
abc
abcc
12345
OUTPUT:  4

可好玩一题,之前学长讲字符串的ppt里截来的,因为题目很简单所以可以用很多方法写,stl里的map和set,哈希都行,顺便学了一下字典树。

之前想了个存储字符串然后sort一遍再遍历前后比较判断总数的思路,被嫌弃了呜呜(也是,方法太笨了

以下是四个写法(再次强调字典树这题mle了○| ̄|_,

#include<bits/stdc++.h>
using namespace std;
set<string> s;
int main()
{
string s1;
int n;cin>>n;
while(n--){
cin>>s1;s.insert(s1);
}
cout<<s.size()<<endl;
}
#include<bits/stdc++.h>
const int mod=;
const int N = 1e6+;
int a[N],n,k;
using namespace std;
map<string,int>mp;
int main()
{
string s;
cin>>n;
while(n--){
cin>>s;mp[s]=;
}
cout<<mp.size()<<endl;
return ;
}
#include<bits/stdc++.h>
const int mod=;
const int N = 1e7+;
int a[N],n,k;
using namespace std;
map<string,int>mp;
int main()
{
string s;
cin>>n;
int ans=,tot=;
while(n--){
int p = ,x=;
cin>>s;
for(int i = ;i < s.size();++i){
x=x*p+s[i];
}
a[++tot]=x;
}
sort(a+,a++tot);
cout<<unique(a+,a++tot)-a-<<endl;
return ;
}
#include<bits/stdc++.h>
const int mod=;
const int N = 1e5+;
int a[N],n,k;
using namespace std;
struct node{
bool r= ;
node *next[];
};
node root;
int ans = ;char s[];
void build_trie(){
int l = strlen(s);
node *p=&root;
int flag = ;
for(int i = ;i < l;++i){
if(p->next[s[i]-'']==NULL){
p->next[s[i]-''] = new node;
}
p=p->next[s[i]-''];
}
if(p->r > )flag =;
p->r = ;
if(flag==)return ;
else ans++;
}
int main()
{
int T;scanf("%d",&T);
while(T--){
scanf("%s",s);build_trie();
}
printf("%d\n",ans);
return ;
}

洛谷 P3370 【模板】字符串哈希 (set||map||哈希||字典树(mle)的更多相关文章

  1. 洛谷 P3370 【模板】字符串哈希

    洛谷 P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的 ...

  2. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  3. 洛谷P3375 [模板]KMP字符串匹配

    To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...

  4. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

  5. 【洛谷1117_BZOJ4650】[NOI2016] 优秀的拆分(哈希_后缀数组_RMQ)

    题目: 洛谷1117 分析: 定义把我校某兔姓神犇Tzz和他的妹子拆分,为"优秀的拆分" 随便写个哈希就能有\(95\)分的好成绩-- 我的\(95\)分做法比fei较chang奇 ...

  6. 【洛谷5537】【XR-3】系统设计(哈希_线段树上二分)

    我好像国赛以后就再也没有写过 OI 相关的博客 qwq Upd: 这篇博客是 NOIP (现在叫 CSP 了)之前写的,但是咕到 CSP 以后快一个月才发表 -- 我最近这么咕怎么办啊 -- 题目 洛 ...

  7. 【AC自动机】洛谷三道模板题

    [题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...

  8. 洛谷-P5357-【模板】AC自动机(二次加强版)

    题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但 ...

  9. 洛谷.1919.[模板]A*B Problem升级版(FFT)

    题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 ...

随机推荐

  1. js基础----数组

    1.数组如何定义 //第一种定义方法 var arr=[1,2,3,4]; //第二种定义方法 var arr=new Array(1,2,3,4); 两者没有任何区别,[]的性能可能略高,因为代码短 ...

  2. vue-cli 4.0.5 配置环境变量样例

    在项目根目录下建 .env 文件,环境变量无论运行何种模式均可获取其设置值. vue 中主要有三种模式: development.test.production,在 package.json 中目前三 ...

  3. PTA 重构二叉树

    重构二叉树 (25 分) 给出两个字符串,分别表示二叉树的先序遍历(根.左子树.右子树)和中序遍历(左子树.根.右子树)的结果. 例如,对于下面的二叉树,先序遍历结果是DBACEGF,中序遍历结果是A ...

  4. HDU 5894 hannnnah_j’s Biological Test ——(组合数)

    思路来自于:http://blog.csdn.net/lzedo/article/details/52585170. 不过并不需要卢卡斯定理,直接组合数就可以了. 代码如下: #include < ...

  5. python3笔记十七:python文件读写

    一:学习内容 读文件 写文件 编码与解码 二:读文件--步骤分解 1.过程 第一步:打开文件第二步:读文件内容第三步:关闭文件 2.第一步:打开文件 open(path,flag[,encoding] ...

  6. MySql 时区错误

    mysql的时区错误问题: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one ...

  7. Java-数据类型与编码(ASCII、Unicode 和 UTF-8)

    机械硬盘硬件结构(了解)https://diy.pconline.com.cn/cpu/study_cpu/1009/2215404_all.html 一.数据储存单位 1.bit(位) https: ...

  8. 4.HadoopMapRe程序设计

    1.介绍 2.基本构架与组件 3.基本算法

  9. python--nolocal

    Compare this, without using nonlocal: x = 0def outer(): x = 1 def inner(): x = 2 print("inner:& ...

  10. idea用法

    更新gradle的依赖后,刷新项目引入jar包的方法: view--Tool Buttons 在右侧 Gradle 点刷新