贝壳找房 · 基础数学 · 算法编程题
贝壳找房 基础数学 n ≤ 1e6 时限 1 秒 / 64 MB

题目描述

牛牛拥有 n 根木棒,长度分别为 1, 2,..., n
现在,牛牛可以做若干次操作,每一次操作,可以选择任意两根木棒,将它们拼接在一起,假设选择的两根木棒的长度分别为 a, b ,那么拼接后的木棒长度为 a+ b
那么,在停止操作之后,牛牛最多可以得到几根长度相同的木棒?

输入输出

输入描述
本题为多组测试数据,第一行输入一个正整数 T( 1≤ T≤ 10 ^ 5) ,代表测试数据的组数。
接下去 T 行,每行一个正整数 n( 1≤ n≤ 10 ^ 6) ,代表木棒的数量,同时表明,木棒的长度分别为 1, 2,..., n
输出描述
对于每组测试数据,一行输出一个整数代表答案。

样例共 1 组

样例 1 · 第一个测试数据中,只有一根木棒,无法进行合并,所以答案就为 1 第二个测试数据中,将长度为 1 和长度为 2 的木棒合并成一根长度为 3 的木棒,此时,牛牛拥有 2 根长度为 3 的木棒,若继续合并,则只能得到 1 根长度为 6 的木棒,所以答案为 2
输入
2
1
3
输出
1
2

算法解析依据充分

考点:基础数学

数据规模 n ≤ 1e6 | 限制 1 秒 / 64MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 1e6,T ≤ 1e5
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:基础数学

本题切入点

1..n 的总和固定,若要凑出 t 根等长木棒,每根长度为 sum/t 且需满足下界约束,取满足条件的最大 t。

把题目转化为数学表达式,用公式或性质直接求值。

思路框架(基础数学 通法 · 非本题专属)

  1. 先写出题目要求的数学表达式或所求量的定义。
  2. 利用代数变形、不等式、函数单调性等性质化简。
  3. 按题面给的精度要求输出(浮点题注意误差)。
  4. 数据范围大时,往往存在 O(1) 或 O(log n) 的数学解,不必模拟。

实现要点:浮点输出通常要求相对误差不超过 1e-7,注意用 double/long double 或高精度小数。

复杂度:时间 O(1) ~ O(log n) | 空间 O(1)

该范式的通法易错点

  • 整数除法丢精度;浮点比较直接用 == 。
  • 题目要求「相对误差」而非「绝对误差」,输出格式没对齐。

对照本题

  • 数据规模 n ≤ 1e6,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。

样例解读

样例 1:输入 2 / 1 / 3 → 输出 1 / 2

第一个测试数据中,只有一根木棒,无法进行合并,所以答案就为 1

第二个测试数据中,将长度为 1 和长度为 2 的木棒合并成一根长度为 3 的木棒,此时,牛牛拥有 2 根长度为 3 的木棒,若继续合并,则只能得到 1 根长度为 6 的木棒,所以答案为 2

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年秋招-贝壳找房-Java工程师-第二批笔试;2024年秋招-贝壳找房-C++工程师-第二批笔试;2024年秋招-贝壳找房-机器学习/数据挖掘工程师-第二批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解