https://vjudge.net/problem/UVA-11732

题意:

给出许多字符串,他们两两按下面的函数比较

输出比较次数

s[i]==t[i]  ,  和  s[i]=='\0'   各算一次比较

法一:

每两个字符串,要么全部匹配,要么中间停止匹配

如果全部匹配,比较次数为 2*len+2(‘\0’两次匹配)

如果中间停止匹配,比较次数为 2*相同前缀长度+1 (1次失败匹配后退出)

所以

1、对于第i个字符串,先加上i-1,即假设全部 中间停止匹配

这样最后再加上全部匹配数

2、匹配一个就+sum*2

#include<cstdio>
#include<cstring>
#define N 1001
using namespace std;char s[N];
int sum[N*4001],len,trie[N*4001][63],tot;
long long ans;
int mark[N*4001];int get(int i)
{if(s[i]>='0'&&s[i]<='9') return s[i]-'0';if(s[i]>='a'&&s[i]<='z') return s[i]-'a'+10;if(s[i]>='A'&&s[i]<='Z') return s[i]-'A'+36;
}
void insert(int cnt)
{int root=0,id;ans+=cnt;for(int i=0;i<len;i++){id=get(i);if(!trie[root][id]) {trie[root][id]=++tot;memset(trie[tot],0,sizeof(trie[tot]));sum[tot]=mark[tot]=0;}root=trie[root][id];ans+=sum[root]<<1;sum[root]++;}ans+=mark[root];mark[root]++;
}
int main()
{int n,t=0;while(scanf("%d",&n)!=EOF){if(!n) return 0;memset(trie[0],0,sizeof(trie[0]));ans=0;tot=0;for(int i=1;i<=n;i++){scanf("%s",s);len=strlen(s);insert(i-1);}printf("Case %d: %lld\n",++t,ans);}
}

View Code

法二:

用cnt记录现在还剩下几个是匹配的

那么每次

1、ans+=cnt-sum 匹配失败

2、ans+=sum*2  匹配成功

3、cnt=sum

注意:为了好处理,所以字符串的结束符也算上了

那么这就要循环到len,另外特殊给‘\0’赋一个id

#include<cstdio>
#include<cstring>
#define N 1001
using namespace std;char s[N];
int sum[N*4001],len,trie[N*4001][63],tot;
long long ans;int get(int i)
{if(s[i]>='0'&&s[i]<='9') return s[i]-'0';if(s[i]>='a'&&s[i]<='z') return s[i]-'a'+10;if(s[i]>='A'&&s[i]<='Z') return s[i]-'A'+36;return 62;
}
void insert(int cnt)
{int root=0,id;for(int i=0;i<=len;i++){id=get(i);if(!trie[root][id]) {trie[root][id]=++tot;memset(trie[tot],0,sizeof(trie[tot]));sum[tot]=0;}root=trie[root][id];ans+=cnt-sum[root];ans+=sum[root]<<1;cnt=sum[root];sum[root]++;}
}
int main()
{int n,t=0;while(scanf("%d",&n)!=EOF){if(!n) return 0;memset(trie[0],0,sizeof(trie[0]));ans=0;tot=0;for(int i=1;i<=n;i++){scanf("%s",s);len=strlen(s);insert(i-1);}printf("Case %d: %lld\n",++t,ans);}
}

View Code

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/6958455.html

uva 11732 strcmp() Anyone?相关推荐

  1. UVA 11732 - strcmp() Anyone?(Trie)

    UVA 11732 - strcmp() Anyone? 题目链接 题意:给定一些字符串,要求两两比較,须要比較的总次数(注意.假设一个字符同样.实际上要还要和'\0'比一次,相当比2次) 思路:建T ...

  2. Uva 11732 strcmp()函数

    题目链接:https://vjudge.net/contest/158125#problem/A 题意: 系统中,strcmp函数是这样执行的,给定 n 个字符串,求两两比较时,strcmp函数要比较 ...

  3. UVA - 11732 strcmp() Anyone?左兄弟右儿子trie

    input n 2<=n<=4000 s1 s2 ... sn 1<=len(si)<=1000 output 输出用strcmp()两两比较si,sj(i!=j)要比较的次数 ...

  4. uva 11732 - strcmp() Anyone? 不错的Trie题

    题解:http://blog.csdn.net/u013480600/article/details/23122503 我的代码一直TLE,,,看了人家的之后,认为1.链式前向星比較好,2.*dept ...

  5. UVa 11732 (Tire树) strcmp() Anyone?

    这道题也是卡了挺久的. 给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较. 因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间. 假设两个不相等的字符串的最长公 ...

  6. strcmp() Anyone? UVA - 11732 左孩子右兄弟Trie/计数

    #include<bits/stdc++.h> using namespace std; #define ll long longconst int maxnode = 4000 * 10 ...

  7. Trie(字典树)解析及其在编程竞赛中的典型应用举例

    摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...

  8. UVA 10515 - Powers Et Al.(数论)

    UVA 10515 - Powers Et Al. 题目链接 题意:求出m^n最后一位数 思路:因为m和n都非常大,直接算肯定是不行的,非常easy想到取最后一位来算,然后又非常easy想到最后一位不 ...

  9. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

最新文章

  1. python lambda_Python 匿名函数 lambda
  2. 第7篇-JAVA面向对象Ⅲ
  3. 【教程】jQuery打造动态下滑菜单
  4. Spring5的系统架构
  5. Spyder打开报错解决办法
  6. pC机OracLe库磁盘坏如何恢复,电脑硬盘坏了数据能恢复吗(6步教你自己在家轻松恢复数据)...
  7. android 9 pie公司,Android 9.0正式推送 定名Android Pie
  8. kdj值应用口诀_KDJ买卖绝学!背熟它短线选股不用愁
  9. 异常总结2013-04
  10. 简约大方干净明亮“现代简约细体字体”
  11. Comic Life 3 for Mac(漫画创作工具)
  12. 二阶系统阶跃响应实验_二阶系统的阶跃响应实验报告
  13. kafka-linux集群搭建小结
  14. 超好看的QQ群管机器人html官网源码
  15. 易语言解压服务器中压缩包,易语言查看RAR文件_包括解压方法_精易论坛
  16. WPS公式编辑器快捷键
  17. Latex \TexStudio 设置数学符号
  18. 深圳大学计算机专业评级,泰晤士中国学科评级榜单2021 南科大上榜学科全为A
  19. 系统封装 EasyBoot如何将WIN7安装版提取到光盘
  20. 用Excel进行个人敏捷项目看板管理

热门文章

  1. centos7搭建CDH
  2. vi/vim文本编辑器的使用
  3. [译] Node.js 流: 你需要知道的一切
  4. 【书籍推荐】给大家分享和推荐前端相关书籍
  5. 学习dubbo(四): 启动时检查
  6. SQL学习精粹之内外连接以及where和on条件的区别
  7. WebConfig配置文件详解
  8. 【转】使用oschina的git服务器
  9. 一步一步学Ruby(八):字符串表达式
  10. 百度,在模仿和创新中成长