1 条题解

  • 0
    @ 2022-7-11 13:55:51

    大概意思就是:

    数组sum[i][j]表示从第1到第i头cow属性j的出现次数。

    所以题目要求等价为:

    求满足

    sum[i][0]-sum[j][0]=sum[i][1]-sum[j][1]=.....=sum[i][k-1]-sum[j][k-1] (j<i)

    中最大的i-j

    将上式变换可得到

    sum[i][1]-sum[i][0] = sum[j][1]-sum[j][0]

    sum[i][2]-sum[i][0] = sum[j][2]-sum[j][0]

    ......

    sum[i][k-1]-sum[i][0] = sum[j][k-1]-sum[j][0]

    令C[i][y]=sum[i][y]-sum[i][0] (0<y<k)

    初始条件C[0][0~k-1]=0

    所以只需求满足C[i][]==C[j][] 中最大的i-j,其中0<=j<i<=n。

    C[i][]==C[j][] 即二维数组C[][]第i行与第j行对应列的值相等,

    那么原题就转化为求C数组中 相等且相隔最远的两行的距离i-j

    大概意思就是:

    数组sum[i][j]表示从第1到第i头cow属性j的出现次数。

    所以题目要求等价为:

    求满足

    sum[i][0]-sum[j][0]=sum[i][1]-sum[j][1]=.....=sum[i][k-1]-sum[j][k-1] (j<i)

    中最大的i-j

    将上式变换可得到

    sum[i][1]-sum[i][0] = sum[j][1]-sum[j][0]

    sum[i][2]-sum[i][0] = sum[j][2]-sum[j][0]

    ......

    sum[i][k-1]-sum[i][0] = sum[j][k-1]-sum[j][0]

    令C[i][y]=sum[i][y]-sum[i][0] (0<y<k)

    初始条件C[0][0~k-1]=0

    所以只需求满足C[i][]==C[j][] 中最大的i-j,其中0<=j<i<=n。

    C[i][]==C[j][] 即二维数组C[][]第i行与第j行对应列的值相等,

    那么原题就转化为求C数组中 相等且相隔最远的两行的距离i-j

    以样例为例

    7 3 7 6 7 2 1 4 2

    先把7个十进制特征数转换为二进制,并逆序存放到特征数组feature[ ][ ],得到:

    7 ->1 1 1

    6 ->0 1 1

    7 ->1 1 1

    2 ->0 1 0

    1 ->1 0 0

    4 ->0 0 1

    2 ->0 1 0

    (行数为cow编号,自上而下从1开始;列数为特征编号,自左到右从0开始)

    再求sum数组,逐行累加得,sum数组为

    1 1 1

    1 2 2

    2 3 3

    2 4 3

    3 4 3

    3 4 4

    3 5 4

    再利用C[i][y]=sum[i][y]-sum[i][0]求C数组,即所有列都减去第一列

    注意C数组有第0行,为全0

    0 0 0 -> 第0行

    0 0 0

    0 1 1 <------

    0 1 1

    0 2 1

    0 1 0

    0 1 1 <-------

    0 2 1

    显然第2行与第6行相等,均为011,且距离最远,距离为6-2=4,这就是所求。

    • 1

    信息

    ID
    1564
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者