测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A71603. 积木(block)

编程题 基础

题目描述

小 X 在地上玩积木,每块积木都是一个 1 \times 1 \times 1 的正方体。地面可以看成一个 n \times m 的网格,其中每一小格内都整齐地从下到上堆着若干块积木。其中第 i 行第 j 列中有 h[i][j]块积木。

现在小 X 想要拿走一些积木,使得剩下来的积木组成一个正方体,正方体指的是长宽高都相同的长方体。

小 X 想问你他最少拿掉多少块积木才能使得最后剩下来的积木组成一个正方体。

输入格式

第一行,2 个整数 nm 表示地面的大小。

接下来 n 行,每行 m 个非负整数。第 i 行第 j 个数表示 h[i][j]

输出格式

一行一个整数表示答案。

输入输出样例

输入 #1
3 3 
2 2 1 
3 2 2 
3 1 2
输出 #1
10
输入 #2
5 5 
4 4 3 4 3 
3 4 3 3 3 
3 3 1 4 4 
3 4 4 3 3 
4 3 4 4 4
输出 #2
77

说明/提示

【样例1解释】

拿完之后每个位置的积木数为:

2 2 0 2 2 0 0 0 0

一共拿掉(2-2)+(2-2)+(1-0)+(3-2)+(2-2)+(2-0)+(3-0)+(1-0)+(2-0)=1+1+2+3+1+2=10 块积木。

【数据范围与解释】

对于所有测试点 1 \leq n,m \leq 1000 ,0 \leq h[i][j] \leq 1000

对于测试点 1-3 1 \leq n,m \leq 50

对于测试点 4-6 1 \leq n,m \leq 200

对于测试点 7-9 1 \leq n,m \leq 1000,0 \leq h[i][j] \leq 20