B
描述
恺撒密码是一种古老的加密方法。它将26个英文字母’A’-‘Z’向左循环移动K位,得到新的密码表。
例如K=2,有:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
CDEFGHIJKLMNOPQRSTUVWXYZAB
则用’C’替代’A’,’D’替代’B’……
对于两个只包含大写字母的字符串A和B,如果A和B长度相同,并且A可以通过某种(某个K)恺撒加密得到B,我们就认为A和B是相似的。
例如”ABC”与”DEF”相似,”HI”与”ZA”相似。显然”相似”关系具有传递性和对称性。
给定N个字符串,请你将相似的字符串聚成一类,并输出最终有几个不同的类别。
输入
第一行包含一个整数N。
以下N行每行包含一个字符串S。S只包含大写字母。
对于50%的数据,1 ≤ N ≤ 100,N个字符串总长度不超过10000。
对于100%的数据,1 ≤ N ≤ 100000,N个字符串总长度不超过1000000。
输出
一个整数表示答案。
样例输入
6
ABC
DEF
ZAB
HIHO
JKJQ
NONU
样例输出
2
参考AC代码
|
|
思路
把每个字符串的开头都移动到A 判断有多少个相等的字符串
放到set里 求size即可
注意s[0]要最后赋值 因为比较时每个字符要与原来的第一个字符算出差值 因为存在环 所以+26 mod 26
C
描述
给定N个整数A1, A2, … AN,小Hi会询问你M个问题。
对于每个问题小Hi给出两个整数L和R(L ≤ R),请你找出[AL, AL+1, AL+2, … AR]中最长的等差连续子数列,并输出其长度。
例如[2, 3, 5, 7, 9]中最长的等差连续子数列是[3, 5, 7, 9]长度为4。
输入
第一行包含两个整数N和M。
第二行包含N个整数A1, A2, … AN。
以下M行每行包含两个整数L和R,代表一次询问。
对于30%的数据,1 ≤ N, M ≤ 1000
对于100%的数据,1 ≤ N, M ≤ 100000 0 ≤ Ai ≤ 10000000
输出
依次对于每个询问输出一个整数,代表答案。
样例输入
6 2
1 2 3 5 7 9
2 6
1 4
样例输出
4
3
参考AC代码
|
|
思路
on预处理出每个数字向右延伸最远的连续等差数列长度
每次在l到r的区间内找出长度的最大值len 用rmq 以及该最大值的位置pos
判断pos+len是否≤r 若满足说明符合条件 直接输出
否则说明len的长度超出了r的限制 这一部分的长度实际为r-pos+1 要与左侧剩下的x到pos-1的位置中的最大值(依然用rmq) 两者求max
所求就是答案