主要自学了一部分hash和KMP,没有太搞清楚,最后看了看视频,有了一定的理解。
题目描述
出题是一件痛苦的事情!
相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!
好吧,题目是这样的:给出一串数以及一个数字 CC,要求计算出所有 A - B = CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。
输入格式
输入共两行。
第一行,两个整数 N, CN,C。
第二行,NN 个整数,作为要求处理的那串数。
输出格式
一行,表示该串数中包含的满足 A - B = CA−B=C 的数对的个数。
输入输出样例
输入 #1复制
4 1 1 1 2 3
输出 #1复制
3
说明/提示
对于 75\%75% 的数据,1 \leq N \leq 20001≤N≤2000。
对于 100\%100% 的数据,1 \leq N \leq 2 \times 10^51≤N≤2×105。
保证所有输入数据绝对值小于 2^{30}230,且 C \ge 1C≥1。
2017/4/29 新添数据两组
首先分析一下题目,可以通过快慢指针来完成,比如1,1,1,1,1,1,1这个奇数的数组中,要找到中间的数,则快的每次走两个,慢的走一个,最后快的走完,慢的会停下,即找到了中间的数。
如果中间的有重复,只需找一次即可,直接记下次数,而不用每一个都走一遍;
代码如下