Description–
小H是个喜欢思考的人,因此也很乐于挑战各种思考题目。今天,他的朋友小L来找他玩,同时小L还带来了一个简单的游戏,小L给出一张划分为W × H的单元格的纸,接着告诉小H,现在要求小H用w × h的纸片(不允许旋转)放在纸上,问小H最多能在纸上放多少张纸片,使得任何两张纸片都没有重叠部分。
当然这个简单的问题很快就被小H解决了,现在喜欢思考小H想到了另一个游戏,就是让小L来放纸片,但是要求小L放最少的纸片,使得小H连再放多一张纸片的空间都没有。
图1为最优放置方法,图2为不允许的放置方法(因为还可以再放置一个),图3为允许但不是最优的放置方法。
小H为了让问题变得有趣,要求小L放置的纸片必须平行于纸的边缘,同时纸片放置的位置可以在实数点上,但是不能超出纸面。
Input–
输入文件包含四个整数W,H,w,,h分别为纸面的长、宽,纸片的长宽,w<=W, h<=H.
Output–
输出一个数字表示最少可以放置的满足要求的数量
Sample Input–
Sample 1
11 4 3 2
Sample 2
10 8 3 4
Sample 3
15 7 4 2
Sample Output–
Sample 1
2
Sample 2
2
Sample 3
4
说明–
70%的数据W<=100,H<=100
100%的数据W<=30000,H<=30000
解题思路–
- 可以看出,一张w * h的纸片可以覆盖2w * 2h的面积(放正中间)
- 若旁边还可以放,则加1
代码–
#include <iostream>
#include <cstdio>
using namespace std;
int W, H, w, h;
int main()
{
freopen("game.in", "r", stdin);
freopen("game.out", "w", stdout);
scanf("%d%d%d%d", &W, &H, &w, &h);
int ww = w * 2, hh = h * 2;
int x = W / ww, y = H / hh; //整块切割
if (W % ww >= w) x++; //
if (H % hh >= h) y++; //碎片切割
printf("%d", x * y);
return 0;
}