灵光一闪 ~ Diamond

本文介绍了一个打印钻石图案的C++程序,通过自定义零坐标和使用STL改进了原始算法,使得代码更简洁高效。该程序支持用户输入,并提供空心和实心钻石的选择。

其实上是我们当时考研复试的上机题目——打印钻石,当时难住了不少人。尽管我做出来了,不过可花了我不少时间。记得当时是采用两层循环来计算,比较麻烦。不过那会儿只求能做出来,哪管得了那么多。

这次一位朋友无意中问到我,我一下子想到一个用自定义零坐标的方法来实现,再加上空间换时间的概念,就成了下面这个小程序。核心代码在7行左右,比当时的少了近2/3。记一下:


  

 

可以选择是否空心。最大为39是因为Console程序一行最多只能是80个字符。

 

(这是我第4次改这个小程序了,前几次是功能上的,这次是改为用STL代替原来的生数组。一朋友说:你老整它干嘛啊?我觉得真正爱好编程的人是乐意对自己的程序去重构的,只要时间和精力允许。)

 

程序虽小,但却体现出灵感的重要性。多思考就一定会有灵感!

c++14 ## 题目描述 Happybob 想做一块煎饼,他决定在一个 $n$ 行 $n$ 列的斜正方形的锅里做一个煎饼,所以煎饼的大小不能超过斜正方形的大小。 由于原料有限,因此 Happybob 的煎饼必须是 $m$ 个长方形覆盖而成的。 Happybob 想知道,他能制作出的最大的煎饼的面积是多少。 --- **形式化题意:** 用 $m$ 个长方形覆盖大小为 $n$ 的斜正方形,最多覆盖多少个格子? **斜正方形和覆盖的定义见说明/提示**。 ## 输入格式 第一行,一个整数 $T$,表示询问数。 接下来 $T$ 行,每行两个整数 $n,m$,表示一次询问。 ## 输出格式 $T$ 行,每一行表示一个询问的答案。 ## 输入输出样例 #1 ### 输入 #1 ``` 3 5 1 6 2 8 2 ``` ### 输出 #1 ``` 9 20 32 ``` ## 说明/提示 ### 样例说明 三次询问的方案是: ![3](https://cdn.luogu.com.cn/upload/image_hosting/m8uup5uc.png) ![4](https://cdn.luogu.com.cn/upload/image_hosting/70a01fpj.png) ![5](https://cdn.luogu.com.cn/upload/image_hosting/lypuap4t.png) (方案不唯一) ### 数据范围 $1\le T\le 50$,$1\le n\le 2\times 10^9$,$1\le m\le\lceil\dfrac{n}{2}\rceil$。 --- ### 形式化定义 **斜正方形的定义:** 更形式化地,建立直角坐标系,定义一个大小为 $n$ 的**斜正方形**的**中心**为原点。 若 $n$ 为奇数,则该**斜正方形**可以描述为所有以 $\big\{(x, y) \big | |x| + |y| \le \lfloor \frac{n}{2} \rfloor \text{ and } x, y \in \Z\big\}$ 中的点为**正方形**中心的边长为 $1$ 的**正方形格子**组成的组合图形。 若 $n$ 为偶数,则该**斜正方形**可以描述为所有以 $\big\{(x, y) \big | |x| + |y| \le \frac{n}{2} \text{ and } (x + \frac{1}{2}), (y + \frac{1}{2}) \in \Z\big\}$ 中的点为**正方形**中心的边长为 $1$ 的**正方形格子**组成的组合图形。 一个 $n=5$ 的斜正方形(淡蓝色为格子中心): ![1](https://cdn.luogu.com.cn/upload/image_hosting/b633qef0.png) 一个 $n=6$ 的斜正方形(淡蓝色为格子中心): ![2](https://cdn.luogu.com.cn/upload/image_hosting/bzq2por3.png) **覆盖方法的定义:** 定义一个长方形 $R$ 覆盖该**斜正方形**,当且仅当 $R$ 为由若干**格子**组成的长方形。 下面是一个覆盖斜正方形的长方形: ![3](https://cdn.luogu.com.cn/upload/image_hosting/7d0jsymo.png) 下面则**不是**覆盖斜正方形的长方形: ![4](https://cdn.luogu.com.cn/upload/image_hosting/2e2374s3.png) ![5](https://cdn.luogu.com.cn/upload/image_hosting/5j8wnvgb.png) ![6](https://cdn.luogu.com.cn/upload/image_hosting/rrxxe2ps.png) 定义一个**格子**被覆盖,当且仅当选择的 $m$ 个覆盖**斜正方形**的长方形中有至少一个完全包含该格子。
最新发布
12-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值