-
Notifications
You must be signed in to change notification settings - Fork 0
CF 1A
Alex Wind edited this page Sep 24, 2013
·
2 revisions
Berland 首都的戏剧广场是一个 n × m 平方米大小的矩形。因为城市周年纪念庆的原因,人们决定给它铺上花岗岩石板。已知每块石板的大小为 a × a 平方米,那么请问,铺满整个广场需要多少块石板呢?
需要注意的是,只要能覆盖整个广场,允许石板铺的面积大于广场。并且你不能将石板弄破,石板的边必须和广场的边保持平行。
输入只有一行,包含三个正整数: n, m 和 a (1 ≤ n, m, a ≤ 109)。
输出铺满广场所需要的石板数量。
广场和石板都是矩形的,所以我们只要弄清出需要铺多少行石板,每行需要多少块石板,最后相乘就得到答案。所以答案为 ceil(m/a) * ceil(n/a) ,在通常情况下,我们可以这么写: ((m+a-1)/a) * ((n+a-1)/a) ,但是要注意答案最大可能达到1018,超过32位整型的表示范围。
在这里可以介绍一种小技巧,上面我们为了计算 ceil(x/y) 的值,不得不将式子写成 (x+y-1)/y ,这个式子既不直观,又易写错。所以我们可以利用负数整除运算的性质(-3/3 的值为 -1 ,而 -4/3 的值为 -2 ),将式子写成 -(-x/y) 。针对这道题,需要将两个数相乘,还可以把负号也去掉,答案为 (-x/y) * (-x/y) 。(也有人认为这种写法难以理解,大家各取所好就好)