UVA 11732 mark这个字典树模版
来源:互联网 发布:华南师范网络教育官网 编辑:程序博客网 时间:2024/06/07 17:39
点击打开链接
题意:询问所有的字符串两两比较的次数和
思路:边插入边计算,节点保存的信息是有多少字符串到这个节点是相同的,每次的结果就是个数*2,然后匹配不成功的时候要+1,若相同则加2
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3fll;const ll INF=0x3f3f3f3f3f3f3f3fll;const int maxn=4010*1010;ll ans;struct Trie{ int ch[maxn][62]; int val[maxn],num[maxn],sz; Trie(){sz=1;memset(ch[0],0,sizeof(ch[0]));} int change(char ch){ if(ch>='0'&&ch<='9') return ch-'0'; if(ch>='a'&&ch<='z') return ch-'a'+10; if(ch>='A'&&ch<='Z') return ch-'A'+36; } void T_insert(char *s,int v){ int u=0,n=strlen(s); for(int i=0;i<n;i++){ int c=change(s[i]); if(!ch[u][c]){ memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0;num[sz]=0; ch[u][c]=sz++; } u=ch[u][c]; ans+=(val[u]<<1); val[u]++; } ans+=num[u];num[u]++; }}trie;char str[1010];int main(){ int n,cas=1; while(scanf("%d",&n)!=-1){ if(n==0) break; ans=0;trie.sz=1; memset(trie.ch[0],0,sizeof(trie.ch[0])); for(int i=0;i<n;i++) scanf("%s",str),trie.T_insert(str,1); printf("Case %d: %lld\n",cas++,ans+n*(n-1)/2); } return 0;}
0 0
- UVA 11732 mark这个字典树模版
- 字典树 模版
- 字典树 基础模版
- 字典树模版
- 字典树模版
- 字典树模版
- 字典树(模版+源码)
- 字典树模版
- 字典树(讲解+模版)
- 字典树 讲解+模版
- HDU1251-字典树模版
- 字典树模版
- 字典树模版
- 《字典树》数组模版
- 字典树模版
- UVA 11732 链式字典树
- 字典树(讲解+模版)
- 字典树(讲解+模版)
- 目标跟踪常用的视频库
- YARN应用开发流程
- 写一个github项目
- 小小爱神隐私政策
- Java基础面试题
- UVA 11732 mark这个字典树模版
- nanoTime()与currentTimeMillis
- 设计模式---可复用面向对象软件的基础 阅读笔记(一)
- python字符串编码
- 内网和外网通俗解释
- 逆序对
- 颠倒的号码牌
- TCP-IP详解:TCP半打开连接及同时打开同时关闭
- abstract class和interface的区别