HDU2072 tri树/map/set/字符串hash
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题
水题
就是用来试试字符串算法的
tri树
- #include <map>
- #include <set>
- #include <cmath>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <string>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <sstream>
- #include <iostream>
- #include <algorithm>
- #include <functional>
- #define For(i, x, y) for(int i=x; i<=y; i++)
- #define _For(i, x, y) for(int i=x; i>=y; i--)
- #define Mem(f, x) memset(f, x, sizeof(f))
- #define Sca(x) scanf("%d", &x)
- #define Scl(x) scanf("%lld",&x);
- #define Pri(x) printf("%d\n", x)
- #define Prl(x) printf("%lld\n",x);
- #define CLR(u) for(int i = 0; i <= N ; i ++) u[i].clear();
- #define LL long long
- #define ULL unsigned long long
- #define mp make_pair
- #define PII pair<int,int>
- #define PIL pair<int,long long>
- #define PLL pair<long long,long long>
- #define pb push_back
- #define fi first
- #define se second
- using namespace std;
- typedef vector<int> VI;
- const double eps = 1e-;
- const int maxn = 1e5 + ;
- const int INF = 0x3f3f3f3f;
- const int mod = 1e9 + ;
- inline int read()
- {
- int now=;register char c=getchar();
- for(;!isdigit(c);c=getchar());
- for(;isdigit(c);now=now*+c-'',c=getchar());
- return now;
- }
- int N,M;
- string s;
- char a[];
- int ans,tot;
- int tree[maxn][];
- int flag[maxn];
- void insert(char *str){
- int l = strlen(str);
- int root = ;
- for(int i = ; i < l; i ++){
- int id = str[i] - 'a';
- if(!tree[root][id]){
- tree[root][id] = ++tot;
- }
- root = tree[root][id];
- }
- if(!flag[root]){
- ans += flag[root] = ;
- }
- }
- int main()
- {
- while(getline(cin,s) && s[] != '#'){
- Mem(tree,);
- Mem(flag,);
- tot = ;
- ans = ;
- stringstream ss(s);
- while(ss >> a){
- insert(a);
- }
- Pri(ans);
- }
- return ;
- }
map/set
- #include <map>
- #include <set>
- #include <cmath>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <string>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <sstream>
- #include <iostream>
- #include <algorithm>
- #include <functional>
- #define For(i, x, y) for(int i=x; i<=y; i++)
- #define _For(i, x, y) for(int i=x; i>=y; i--)
- #define Mem(f, x) memset(f, x, sizeof(f))
- #define Sca(x) scanf("%d", &x)
- #define Scl(x) scanf("%lld",&x);
- #define Pri(x) printf("%d\n", x)
- #define Prl(x) printf("%lld\n",x);
- #define CLR(u) for(int i = 0; i <= N ; i ++) u[i].clear();
- #define LL long long
- #define ULL unsigned long long
- #define mp make_pair
- #define PII pair<int,int>
- #define PIL pair<int,long long>
- #define PLL pair<long long,long long>
- #define pb push_back
- #define fi first
- #define se second
- using namespace std;
- typedef vector<int> VI;
- const double eps = 1e-;
- const int maxn = 1e5 + ;
- const int INF = 0x3f3f3f3f;
- const int mod = 1e9 + ;
- inline int read()
- {
- int now=;register char c=getchar();
- for(;!isdigit(c);c=getchar());
- for(;isdigit(c);now=now*+c-'',c=getchar());
- return now;
- }
- int N,M;
- string a,s;
- int ans = ;
- map<string,bool>P;
- int main()
- {
- while(getline(cin,s) && s[] != '#'){
- P.clear();
- ans = ;
- stringstream ss(s);
- while(ss >> a){
- if(!P[a]){
- ans++;
- P[a] = ;
- }
- }
- Pri(ans);
- }
- return ;
- }
Hash
- #include <map>
- #include <set>
- #include <cmath>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <string>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <sstream>
- #include <iostream>
- #include <algorithm>
- #include <functional>
- using namespace std;
- const int MAXBUF=;char buf[MAXBUF],*ps=buf,*pe=buf+;
- inline bool isdigit(const char& n) {return (n>=''&&n<='');}
- inline void rnext(){if(++ps==pe)pe=(ps=buf)+fread(buf,sizeof(char),sizeof(buf)/sizeof(char),stdin);}
- template <class T> inline bool in(T &ans){
- #ifdef VSCode
- ans=;T f=;register char c;
- do{c=getchar();if ('-'==c)f=-;}while(!isdigit(c)&&c!=EOF);
- if(c==EOF)return false;do{ans=(ans<<)+(ans<<)+c-;
- c=getchar();}while(isdigit(c)&&c!=EOF);ans*=f;return true;
- #endif
- #ifndef VSCode
- ans =;T f=;if(ps==pe)return false;do{rnext();if('-'==*ps)f=-;}
- while(!isdigit(*ps)&&ps!=pe);if(ps==pe)return false;do{ans=(ans<<)+(ans<<)+*ps-;
- rnext();}while(isdigit(*ps)&&ps!=pe);ans*=f;return true;
- #endif
- }const int MAXOUT=; //*(int(*)[10])p
- char bufout[MAXOUT], outtmp[],*pout = bufout, *pend = bufout+MAXOUT;
- inline void write(){fwrite(bufout,sizeof(char),pout-bufout,stdout);pout = bufout;}
- inline void out_char(char c){*(pout++)=c;if(pout==pend)write();}
- inline void out_str(char *s){while(*s){*(pout++)=*(s++);if(pout==pend)write();}}
- template <class T>inline void out_int(T x) {if(!x){out_char('');return;}
- if(x<)x=-x,out_char('-');int len=;while(x){outtmp[len++]=x%+;x/=;}outtmp[len]=;
- for(int i=,j=len-;i<j;i++,j--) swap(outtmp[i],outtmp[j]);out_str(outtmp);}
- template<typename T, typename... T2>
- inline int in(T& value, T2&... value2) { in(value); return in(value2...); }
- #define For(i, x, y) for(int i=x;i<=y;i++)
- #define _For(i, x, y) for(int i=x;i>=y;i--)
- #define Mem(f, x) memset(f,x,sizeof(f))
- #define Sca(x) scanf("%d", &x)
- #define Scl(x) scanf("%lld",&x);
- #define Pri(x) printf("%d\n", x)
- #define Prl(x) printf("%lld\n",x);
- #define CLR(u) for(int i=0;i<=N;i++)u[i].clear();
- #define LL long long
- #define ULL unsigned long long
- #define mp make_pair
- #define PII pair<int,int>
- #define PIL pair<int,long long>
- #define PLL pair<long long,long long>
- #define pb push_back
- #define fi first
- #define se second
- #define Vec Point
- typedef vector<int> VI;
- const double eps = 1e-;
- const int maxn = 1e6 + ;
- const int INF = 0x3f3f3f3f;
- const int mod = 1e9 + ;
- int N,M,tmp,K;
- char str[maxn];
- string s;
- vector<ULL> P;
- ULL Hash(char *p)
- {
- ULL h = ;
- ULL g;
- for (; *p; p++)
- {
- h = (h << ) + *p;
- g = h & 0xF0000000;
- if (g)
- {
- h ^= (g >> );
- h ^= g;
- }
- }
- return h;
- }
- int main()
- {
- while(getline(cin,s) && s[] != '#'){
- stringstream ss(s); P.clear();
- while(ss >> str) P.pb(Hash(str));
- sort(P.begin(),P.end());
- P.erase(unique(P.begin(),P.end()),P.end());
- Pri(P.size());
- }
- #ifdef VSCode
- write();
- system("pause");
- #endif
- return ;
- }
HDU2072 tri树/map/set/字符串hash的更多相关文章
- cf580E. Kefa and Watch(线段树维护字符串hash)
题意 $n$个数的序列,$m + k$种操作 1.$l , r, k$把$l - r$赋值为$k$ 2.$l, r, d$询问$l - r$是否有长度为$d$的循环节 Sol 首先有个神仙结论:若询问 ...
- hdu 5469 Antonidas(树的分治+字符串hashOR搜索+剪枝)
题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这 ...
- 字符串Hash/树Hash学习笔记
哈希 Tags:字符串 作业部落 评论地址 一.概述 百度百科: 散列表(Hash table/哈希表),是根据关键码值(Key value)而直接进行访问的数据结构. 哈希表常用于比较两个字符串是否 ...
- 字符串hash与字典树
title: 字符串hash与字典树 date: 2018-08-01 22:05:29 tags: acm 算法 字符串 概述 这篇主要是关于字符串里的 字符串hash 和 字符串字典树,,两个都是 ...
- 线段树 + 字符串Hash - Codeforces 580E Kefa and Watch
Kefa and Watch Problem's Link Mean: 给你一个长度为n的字符串s,有两种操作: 1 L R C : 把s[l,r]全部变为c; 2 L R d : 询问s[l,r]是 ...
- hdu 4821 字符串hash+map判重 String (长春市赛区I题)
http://acm.hdu.edu.cn/showproblem.php?pid=4821 昨晚卡了非常久,開始TLE,然后优化了之后,由于几个地方变量写混.一直狂WA.搞得我昨晚都失眠了,,. 这 ...
- (通俗易懂小白入门)字符串Hash+map判重——暴力且优雅
字符串Hash 今天我们要讲解的是用于处理字符串匹配查重的一个算法,当我们处理一些问题如给出10000个字符串输出其中不同的个数,或者给一个长度100000的字符串,找出其中相同的字符串有多少个(这样 ...
- 字符串hash+回文树——hdu6599
拖了很久才补的回文树,感觉网上的博客都是一个做法..回文树统计不同种类的回文串出现次数,然后用字符串hash来判每个回文子串是否符合要求 #include<bits/stdc++.h> u ...
- P7114 [NOIP2020] 字符串匹配 (字符串hash+树状数组)
好多题解用的扩展KMP(没学过,所以不用这种方法). 我们按照题目要求记F(s)表示s串的权值,可以预处理出前缀权值(用于A)和后缀权值(用于C),枚举AB的长度i=2~n-1,不需要分开枚举,我们只 ...
随机推荐
- Beta项目展示
Team C# 一.团队成员简介 杜正远,队长. 博客地址:http://www.cnblogs.com/kevindu/ 崔强,全职PM. 博客地址:http://www.cnblogs.com/m ...
- 《Linux内核分析》第七周学习笔记
<Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- SpringMVC-RESTRUL___CRUD知识点总结
RESTful风格 <!-- 携带surveyId去后台 --><!-- RESTFUL风格:/xxx/23 --><!-- 接收方式:@PathVariable注解 - ...
- 微信小程序动态数据跑马灯组件编写
开发必备:熟悉微信小程序组件开发 开发思路:如果只有一条数据,直接用css3关键帧动画:如果有多条数据,则在当前动画运动到一定时间的时候,将其数据替换掉,使之在视觉效果上有一个从下到上播放的状态.数组 ...
- 使用Java+Kotlin双语言的LeetCode刷题之路(三)
BasedLeetCode LeetCode learning records based on Java,Kotlin,Python...Github 地址 序号对应 LeetCode 中题目序号 ...
- 定义类型别名(typedef,using)
说到类型别名,无非是给类型名(如int,char,float,double,bool)取一个比较有特殊含义的名字而已 最常用的关键莫过于 typedef 吧 typedef最常见的用法是与结构体str ...
- 被深信服上网行为管理器AC拒绝的操作如何正常访问
1.管理员登入帐号 2.如下图,在菜单[实时状态]-[上网行为监控]中,搜索指定IP的行为记录,找到被拒绝的数据 3.如下图,在菜单[系统管理]-[全局排除地址]中,增加不过滤的地址并提交即可
- MySQL乐观锁在分布式场景下的实践
背景 在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作.在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不 ...
- Angular @的作用
<!DOCTYPE html><html lang="zh-cn" ng-app="myApp"><head> <me ...
- 软件开的目录规范+sys,os,time模块
—————————————————————————————————————————————————————————————————— start.py import sys,os # print(__ ...