先两两比较,比较次数是两者相同的最长前缀长度*2+1,比较特殊的情况是两者完全相同时候比较次数是单词长度*2+2,

两个单词'末尾\0'和'\0'比较一次,s尾部'\0'和循环内'\0'比较一次。

因此,对于一个单词,只要知道和它某个相同的最长前缀的单词数就可以计算出方案数了。

用tire,记录一颗子树上的结点数cnt[u](用于计算当前前缀是最长前缀的单词数)和在某个结点终止的单词数val[u](处理特殊情况)。

因为字符集比较大,可能会有较大的空间浪费,所以用一个链式的结构保存子节点。(查找子节点的时候效率会低一些)。

如果插完了以后再统计的话一个前缀会被算2次,要除以2。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxnds = *+; char ch[maxnds];//用来保存结点的字符值
int cnt[maxnds];
int son[maxnds],bro[maxnds]; //son是链表头,bro[u]表示u的下一个兄弟结点
int val[maxnds];
int nds;//nds是下一个可以分配的结点
void init()
{
nds = ; cnt[] = son[] = val[] = ;
} ll add(char *s)
{
ll ret = ;
int u = ,v,i;
for(i = ; s[i]; i++){
for(v = son[u]; v; v = bro[v]){
if(ch[v] == s[i]) break;
}
if(!v){
//初始化新结点
bro[nds] = son[u];
ch[nds] = s[i];
val[nds] = cnt[nds] = son[nds] = ;
//把新结点插到链表头,并分配下一个结点
v = son[u] = nds++;
}
ret += (cnt[u]-cnt[v])*(i<<|);
cnt[u]++;
u = v;
}
if(val[u]) ret += val[u]*((i+)<<);
ret += (cnt[u]-val[u])*(i<<|);
cnt[u]++; val[u]++;
return ret;
} char str[];
int main()
{
//freopen("in.txt","r",stdin);
int N,kas = ;
while(scanf("%d\n",&N),N){
ll ans = ;
init();
while(N--){
gets(str);
ans += add(str);
}
printf("Case %d: %lld\n",++kas,ans);
}
return ;
}

最新文章

  1. word2vec + transE 知识表示模型
  2. iOS开发时,在Xcode中添加多个Targets进行版本控制
  3. python—类对象和实例对象的区别
  4. Python安装指南
  5. VB6 GDI+ 入门教程[1] GDI+介绍
  6. Jquery 表格操作,记录分页情况下,每一页中被用户勾选的信息
  7. Google工程师打造Remix OS系统 桌面版安卓下载
  8. 【Android】跟着教程做の学习笔记
  9. mysql配置文件转载
  10. MYSQL 没有varchar(max)这个类型。
  11. DOM元素对象的属性和方法(2)
  12. win8下 msvcr100d.dll文件缺失解决方法
  13. windows 系统下C++实现的多线程
  14. 随机ID添加
  15. Chapter 4 Invitations——18
  16. UVA11987 Almost Union-Find
  17. 用PS绘制立体字的效果教程
  18. Android 实时视频编码—H.264硬编码
  19. ES6 新增数据类型检测 Set Map Proxy
  20. 612.1.003 ALGS4 | Stacks and Queues

热门文章

  1. Ubuntu 14.04中修复默认启用HDMI后没有声音的问题
  2. Software - (转)Winform 程序捕获全局异常
  3. LeetCode: 598 Range Addition II(easy)
  4. 数据库路由中间件MyCat - 源代码篇(12)
  5. 【Java面试题系列】:Java基础知识常见面试题汇总 第二篇
  6. svn提交的时候提示No space left on device
  7. JS实现动态瀑布流及放大切换图片效果(js案例)
  8. 02.Jquery Mobile介绍以及Jquery Mobile页面与对话框
  9. net core分块上传文件
  10. 爬虫(ProxyHandler)——代理