1 条题解
-
0
解题思路
- 函数
grid
:- 函数
grid
接受两个参数x
和y
,将x
和y
转换为整数后相乘并返回结果,即计算在网格布局下可放置元素的数量。
- 函数
- 函数
skew
:- 函数
skew
接受两个参数x
和y
。 - 首先处理
x
,如果x - 0.5
的整数部分等于x
的整数部分,则a2
等于a1
(a1
是x
的整数部分),否则a2
等于a1 - 1
。 - 将
y
减1
,如果y
小于0
,则返回0
。 - 初始化
ans
为a1
,定义d = sqrt(3.0) / 2.0
。 - 通过循环,每次循环
y
减去d
,当y
小于eps
(eps
定义为1e-10
)时结束循环。在循环中,如果i
为奇数,ans
加上a1
,否则加上a2
,最后返回ans
,即计算在斜向布局下可放置元素的数量。
- 函数
- 主函数
main
:- 使用
while
循环持续读取输入的a
和b
。 - 分别调用
grid
函数和skew
函数计算两种布局下可放置元素的数量ans1
和ans2
,同时计算a
和b
交换顺序后的grid
和skew
布局数量,并取最大值。 - 根据
ans1
和ans2
的大小关系,输出较大的数量以及对应的布局类型(grid
或skew
)。
- 使用
#include <cstdio> #include <cstring> #include <iomanip> #include <iostream> #include <algorithm> #include <string> #include <math.h> using namespace std; const double eps=1e-10; double a,b; int grid(double x, double y) { return (int) x * (int) y; } int skew(double x, double y) { int a1 = (int) x, a2; if ((int) (x - 0.5) == (int) x) a2 = a1; else a2 = a1 - 1.0; y -= 1.0; if (y < 0.0)return 0; int ans = a1; double d = sqrt(3.0) / 2.0; for (int i = 2;; ++i) { y -= d; if (y < eps)break; if (i & 1) { ans += a1; } else ans += a2; } return ans; } int main() { while (cin >> a >> b) { int ans1 = max(grid(a, b), grid(b, a)), ans2 = max(skew(a, b), skew(b, a)); if (ans1 >= ans2) cout << ans1 << ' ' << "grid" << endl; else cout << ans2 << ' ' << "skew" << endl; } return 0; }
- 函数
- 1
信息
- ID
- 320
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者