题目
问题描述
用 a×a 的石板覆盖 n×m 的长方形广场,允许石板覆盖的区域超出广场,不允许打破石板,石板的两侧应平行于广场两侧,要求覆盖完广场所需的石板数量最少是多少。
输入格式
- 第1行是整数n,m,a
输出格式
- 输出一行,表示最少所需的石板数量
数据范围
100%的数据满足: 1 ≤ n , m , a ≤ 1 0 9 1\le{n},m,a\le{10^9} 1≤n,m,a≤109
输入/输出例子
输入
6 6 4
输出
4
提示
无
解题思路
思路
要求用a* a的覆盖n*m的,我们可以想到算出它行需要几个,列需要几个,再乘起来就好了。
分析
于是就有人说道:这也太简单了。
于是就有一下代码:
n
/
a
∗
m
/
a
n/a*m/a
n/a∗m/a
但这也不是对的,因为可能覆盖不完全,导致你还要多一张,而C++的除自动向下取整,所以我们还要判断是否要+1。
正常人的代码就出来了,不过各位读者毕竟不是寻常人,正好利用bool类型的1和0,我们的代码就出来了:
Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,m;
signed main()
{
scanf("%lld%lld%lld",&n,&m,&k);
printf("%lld",(n/k+(n%k!=0))*(m/k+(m%k!=0)));
}