写完代码后提交,一直RE。尝试把数组开大点,仔细找逻辑问题,看有没有造成死循环的可能,无果。
后来看别人解题报告,才注意到有
sum=sum%prime;
if(sum<0) sum+=prime; //求模运算是可能得到负数的。 。。。。
看到题目的第一个反应是树状数组。思考,无果。
看discuss,要hash。怎么hash,思考,无果。
google之。得到如下转换方式。
给出SAMPLE
7 3
7
6
7
2
1
4
2
先转化成二进制:
1 1 1
1 1 0
1 1 1
0 1 0
0 0 1
1 0 0
0 1 0
然后在列上进行累加:
1 1 1
2 2 1<----
3 3 2
3 4 2
3 4 3
4 4 3<----
4 5 3
上面这两步转化还好想。答案是4,是因为两个箭头所指的行列上的差相等。
然后在行上,所有值减去最右边的数:
0 0 0
1 1 0<----
1 1 0
1 2 0
0 1 0
1 1 0<----
1 2 0
这一步转化推一下就知道,不过实在不好想。
然后找出两个一样的行,使他们的距离最远。答案就是最远的距离。