题目大意:给你一个字符串,和一些问题,每个问题问你[l,r]子串的哈希值是多少. 哈希值计算方法为:$H(s)=\prod _{i=1} ^{i\leq len(s)}(s_i-28)(mod\ 9973)$. 其中$s_i$代表 S[i] 字符的 ASCII 码. 解题思路:我们知道,要算区间[l,r]所有的和,就可以用$O(n)$的时间预处理出数组t,令$t[i]$表示前i个数的和,那么$t[r]-t[l-1]$即为区间[l,r]所有之和,询问时间复杂度$O(1)$,这就是维护前缀和的做法.…
原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 504    Accepted Submission(s): 195 Problem Description 度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了…
原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 247    Accepted Submission(s): 174 Problem Description 度熊所居住的 D 国,是一个完全尊重人权的国度.以至于这个国家…
原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 403    Accepted Submission(s): 136 Problem Description   度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以…
题目大意:给你n,规定一个串中相邻的两个1可以合并为一个2(别的不行),让你求长度为n的全1串最多能变成多少种不同的串. 解题思路:我们先来找一波规律,发现n=1,2,3,4,5时答案分别为1,2,3,5,8. 嗯?斐波那契数列?没错就是这样.不过斐波那契数列的第200项好像有四五十位,long long也存不下? Java大法好,不用打烦人的高精度!当然时间就比较慢了. Java Code: import java.io.*; import java.math.*; import java.u…
题目大意:有n个操作,每个操作是以下三个之一,要你实现这些操作. 1.insert : 往字典中插入一个单词2.delete: 在字典中删除所有前缀等于给定字符串的单词3.search: 查询是否在字典中有一个字符串的前缀等于给定的字符串 解题思路:Trie树即可. 注意代码第49行的判断,我当时以为只要成功搜到这个前缀就一定有答案,忽略了删除操作使某些前缀的单词数为0的情况. C++ Code: #include<cstdio> struct node{ int cnt; node* nxt…
题目大意:给你n个字符串,如果一个字符串可以通过重新排列变成另一个字符串,则认为这两个字符串相等.每输入一个字符串,输出这个字符串和与它相等的之前出现了几次. 解题思路:我们可以用map保存一个字符串出现的次数,对于每个读进来的串,先把它排序一遍即可.由于字符串长度最大只有40,排序时间几乎可以忽略. 于是时间复杂度就只有map的$O(n\log n)$了. C++ Code: #include<iostream> #include<map> #include<algorit…
题意:给出一个字符串,每次询问给出x和y要求算出从x到y的每个字符的(ASCII 码值-28)的值的积(mod9973). 分析:首先的想法肯定是算出每个位置的前缀积,然后只要F[y]/F[x-1]即可.但是每个前缀积都已经mod9973了,就不能直接这样得出结果了,所以利用求逆元.因为a/b(mod p)p是质数的话,相当于a*inv(b) (mod p),所以只要保存每个位置的前缀积和前缀积的逆元就可以了. 但是题目有个坑点,如果x和y超出了这次字符串的位置,可以使用上一次数据储存的值而不是…
题意:度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列.最多200个1. 比如:如果序列是:(111).可以构造出如下三个新序列:(111), (21), (12). 分析:对于任意的相邻的两个1合并,那么总的个数就会减1,然后把2放在任意一个位置,也就是说,如果有x个2,那么总的数字个数就是n-x,相当于在这n-x中选择x个变成2,那么显然是组合数求解,在枚举x的个数即可.…
看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0%D9%B6%C8%D6%AE%D0%C7%22+-+%D7%CA%B8%F1%C8%FC%A3%A8Astar+Round1%A3%A9&source=1&searchmode=source Solved Pro.ID Tit…