pku 3274 Gold Balanced Lineup(预处理,hash)

来源:互联网 发布:农村淘宝app最新版本 编辑:程序博客网 时间:2024/05/22 06:18

写完代码后提交,一直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
这一步转化推一下就知道,不过实在不好想。
然后找出两个一样的行,使他们的距离最远。答案就是最远的距离。