题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two strings of the same length is defined as the number of positions at which the corresponding characters are different. For example, the Hamming distance…
题意:给你两个字符串a,b,不区分大小写,将b分成三段,重新拼接,问是否能得到A: 思路:暴力枚举两个断点,然后check的时候需要字符串hash,O(1)复杂度N*N: 题目链接:传送门 #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cmath> #include<string> #…
[题意] 给一个字符串组成的矩阵,规模为n*m(n<=10000,m<=10),如果某两列中存在两行完全相同,则输出NO和两行行号和两列列号,否则输出YES [题解] 因为m很小,所以对每一行枚举其中两个字符串,检查之前行中对应的两列里是否重复即可.但是如何判重. 一开始想的把字符串做成pair然后用map映射为行号,但是TLE. 后来想到用hash判重,可能是因为哈希函数不够好,还是TLE... 总之这道题卡了三个小时,一直TLE. 枚举每一列,对枚举到的那一列从小到大排序,然后找到相邻两个…
题意: 给你N个数字,带前导0,问出现最多的数字个数 思路: 读入,清楚前导0,Hash. 用邻接表字符串Hash有一下几点注意 string,不要memset,否则地址也没了,涉及到stl的东西,少用memset,类似还有vector; 用 assign截断字符串也是很黄很暴力的 直接assign(a.begin(),a.end) 即可 其实这种算法跟MAP 也没什么两样了...字符串HASH的更强大地方在于后缀的随机算法,这里不要过于纠结 而且MAP 效率高的多... #include <c…
题意:有n个单词,每个单词长度为k,顺时针将它们写成一个圆圈串.现在知道g个长度为k的单词,是否可以从这g个单词中选择n个形成这个圆圈串?如果有多个答案,任意输出一个. 思路 可以发现,如果枚举第一个串的开始位置,由于输入的g个串,长度都为k,那么每个串的位置就固定了.那么我只要知道,在主串上那一段位置的字符串,是否存在在g个串中,然后如果每个都存在,那么就是符合的.这一部分可以用字符串hash做到O(1)判断. 复杂度的话,枚举第一个串的复杂度是k,一共需要匹配n个字符串,所以总复杂度是O(n…
魔咒词典 TimeLimit: 8000/5000 MS (Java/Others)  MemoryLimit: 32768/32768 K (Java/Others) 64-bit integer IO format:%I64d   Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词典.当哈利听到一个魔咒时…
Andy the smart computer science student was attending an algorithms class when the professor asked the students a simple question, "Can you propose an efficient algorithm to find the length of the largest palindrome in a string?" A string is sai…
https://cn.vjudge.net/problem/20907/origin 长度是 n 的字符串 s,如果它自身是回文数,且它的长度为 的前缀和后缀是 (k - )-回文数,则它被称作 k-回文数.按照定义,任何字符串 (甚至空字符串) 都是 -回文数. 字符串 s 的回文度,被定义为这样的一个最大数 k,满足 s 是 k-回文数.例如, . 给定一个字符串.您的任务是,找出它的全部前缀的回文度之和. 输入 输入数据的第一行,包含了一个非空的字符串,由拉丁字母和数字组成.字符串的长度,…
题面戳我 Solution 我们按照每个字母出现的位置进行\(hash\),比如我们记录\(a\)的位置:我们就可以把位置表示为\(0101000111\)这种形式,然后进行字符串\(hash\) 每次查询时,我们就把两个子串的每个字母的\(hash\)值,取出来,判断能否一一对应即可 为啥我的常数那么大,2700ms Code //It is coded by ning_mew on 7.23 #include<bits/stdc++.h> #define LL long long usin…
题目链接:传送门 描述 后缀数组 (SA) 是一种重要的数据结构,通常使用倍增或者DC3算法实现,这超出了我们的讨论范围. 在本题中,我们希望使用快排.Hash与二分实现一个简单的 $O(n \log^2 ⁡n )$ 的后缀数组求法. 详细地说,给定一个长度为 n 的字符串S(下标 0~n-1),我们可以用整数 k(0≤k<n) 表示字符串S的后缀 S(k~n-1). 把字符串S的所有后缀按照字典序排列,排名为 i 的后缀记为 SA[i].额外地,我们考虑排名为 i 的后缀与排名为 i-1 的后…