JZOJ·游戏【模拟】

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值