Related
In following contests:
两条记录属于同一类,当且仅当一条记录经过循环左移,再将所有元素加上同一个整数 d,能够得到另一条记录。
由于所有元素同时加上 d 不会改变相邻元素的差值,因此可以构造循环差分数组:
bi=a(i+1)modk−ai连锁店统计 n 家门店连续 k 天的盈亏,单位是元。正数表示当天盈利,负数表示当天亏损。
两条记录属于同一类,当且仅当存在整数 r、d(0≤r<k),把其中一条循环左移 r 位,再将每个数加上 d,得到的结果与另一条逐项相同。循环左移 1 位是把第一个数移到末尾,其余数依次前移。r=0 表示不移动。d 可以为负或 0。
求不同类的个数。
第一行两个整数 n、k。
接下来 n 行,每行 k 个整数,表示一家门店 k 天的盈亏。
1≤n≤2×104
1≤k≤20
−109≤ 每天的盈亏 ≤109
输出一个整数,为不同类的个数。
输入
4 3
3 -1 2
5 -2 0
0 0 0
-1 2 3
输出
3
说明
第一条 3,−1,2 循环左移 1 位得到 −1,2,3,与第四条相同。
第二条 5,−2,0 与第一条对不上:
第三条 0,0,0 也对不上:
第二条、第三条各自成类。一共 3 类。
输入
3 4
2 -3 1 4
4 7 5 0
-2 0 1 5
输出
2
说明
第一条 2,−3,1,4 循环左移 2 位得到 1,4,2,−3,每个数再加 3,得到 4,7,5,0,与第二条相同。
第三条 −2,0,1,5 与第一条的四种左移都对不上:
因此一共 2 类。
In following contests:
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册