【uva11732】strcmp() Anyone?

2023-11-07 19:09
文章标签 strcmp anyone uva11732

本文主要是介绍【uva11732】strcmp() Anyone?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:https://vjudge.net/problem/UVA-11732
题解
建一棵trie树,每次经过一个点,该点的计数器+1
插入的时候顺便统计,分字符相同(*2)和不同(*1)讨论一下就好
注意最后一位的比较,可以都赋值为47(’\’)
考虑到串只有4000个但串比较长,需要使用左儿子右兄弟表示法

下面的代码会T,我也没办法啊(一脸无辜),路过的大佬们帮忙看看
时限2s,极限数据3.5s,难道这就是所谓的卡常数?

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;const int N=4000010;
int son[N],bro[N],val[N];
int T,n;
LL ans;
char str[4010];
char ch[N];
int size;void insert(char *s)
{int len=strlen(s+1),t=1,p;val[1]++;for(int i=1;i<=len+1;i++){for(p=son[t];p;p=bro[p])if(ch[p]==s[i]) break;if(p==0) {p=++size;ch[p]=s[i];bro[p]=son[t];son[p]=0;val[p]=1;son[t]=p;ans+=val[t]-1;t=p;}else ans+=val[t]-1+val[t],val[p++],t=p;}
}int main()
{
//  freopen("in.in","r",stdin);
//  freopen("out1.out","w",stdout);while(~scanf("%d",&n)&&n){size=1;ch[1]=val[1]=bro[1]=son[1]=0;ans=0;for(int i=1;i<=n;i++){scanf("%s",str+1);insert(str);}printf("Case %d: %lld\n", ++T, ans);}return 0;
}

这篇关于【uva11732】strcmp() Anyone?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365685

相关文章

AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 论文:https://arxiv.org/pdf/2311.17117 网页:https://humanaigc.github.io/animate-anyone/ MOTIVATION 角色动画的

UVA - 11732 strcmp() Anyone?

题意:题目给出了标准strcmp()函数的代码,给你n个单词(n  <= 4000, len <= 1000, 大小写字母+数字),问你这些单词两两调用strcmp()函数一共比较了多少次 思路:字符串S1,S2比较分两种情况:S1和S2有相同的前缀S,那么ans = len(S)*2+1; S1和S2完全相同的话:ans = (len(S)+1) * 2,等于算上了‘\0’ 然后按照Tri

[Zer0pts2020]easy strcmp 分析与加法

查壳 Ubuntu上的64位程序 第一步应该尝试运行一下   啥也不是 (这里我改了程序,原来应该是a1>1) 但是我动调发现a1值是1 我就改了判断 但是还是没什么用 也找不到a2的引用 找一下有没有什么improt调用 发现还是啥也不是 思路这里断了 刚好这个程序几个代码而已 函数看完! 这个比较像哈 但是你会发现没有什么引用?????

模拟通讯录(详解通讯录排序qsort,strcmp)

前言:         学习了C语言结构体、联合体、枚举等,就可以写一个通讯录来强化自己对结构体的理解学习。顺便提升大家的基本功!! 通讯录菜单的打印:         关于菜单的打印在之前写游戏的时候写过多次,大家可以参照之前的改写菜单。 代码如下: int main(){int input = 0;do{menu();printf("请输入你的选择:>");scanf("%d",

(C语言)自己写字符串操作函数(一)——strlen/strcpy/strcat/strcmp/strchr/strpbrk/strstr等相关函数

看到很多面试都会要求你写一些简单的字符串操作函数,这些函数看起来挺简单的,但是自己写的时候就会发现不少的问题。所以我自己把大部分的字符串操作函数都写了一遍,然后用了个测试程序来测试自己写的函数与库函数是否相同。包括字符串长度函数、不受限制的字符串函数、受限制的字符串函数、字符串查找基础函数。下面直接上代码: my_string.h 字符串操作函数头文件 #include <

strcpy、strncpy、strcat、strncat、strcmp、strstr字符串函数的使用和模拟

strcpy的使用和模拟(作用) 将一个字符串的内容复制到另外一个字符串中代替掉。 strcpy的使用效果 #include <stdio.h>#include <string.h>int main (){char str1[]="Sample string";char str2[40];char str3[40];strcpy (str2,str1);strcpy (str3,"cop

c语言:strcmp

strcmp函数是用于比较两个字符串的库函数,其功能是根据ASCII值逐一对两个字符串进行比较。 语法:strcmp(str1, str2)   返回值: 如果str1等于str2,则返回0。 如果str1小于str2,则返回负数(具体值取决于C实现)。 如果str1大于str2,则返回正数(具体值取决于C实现)。

字符串函数(一):strcpy(拷贝),strcat(追加),strcmp(比较),及strncpy,strncat,strncmp

字符串函数 一.strcpy(字符串拷贝)1.函数使用2.模拟实现 二.strcat(字符串追加)1.函数使用2.模拟实现 三.strcmp(字符串比较)1.函数使用2.模拟实现 四.strncpy1.函数使用2.模拟实现 五.strncat1.函数使用2.模拟实现 六.strncat1.函数使用2.模拟实现 一.strcpy(字符串拷贝) 1.函数使用 char* strc

strcmp与strncmp的用法

strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串。 strcmp C/C++函数,比较两个字符串 设这两个字符串为str1,str2, 若str1==str2,则返回零; 若str1 > str2,则返回正数; 若str1< str2,则返回负数。 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。 如: s

【ARM 嵌入式 C 字符串系列 23.9 -- strcmp 与 strncmp 在使用上的区别以及注意事项】

文章目录 strcmp 与 strncmp 使用介绍strcmpstrncmp使用建议 strcmp 与 strncmp 使用介绍 strcmp 和 strncmp 都是 C 语言标准库中用于比较两个字符串的函数,它们定义在 <string.h> 头文件中。这两个函数在功能上相似,但在使用方式和应用场景上有一些区别。 strcmp strcmp 函数比较两个字符串,直到遇