You need to enable JavaScript to run this app. 双骰子最可能和值输出Java代码无法通过评测的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

双骰子最可能和值输出Java代码无法通过评测的问题排查

代码存在的严重缺陷

以下问题会直接导致隐藏边界、大输入测试用例判题失败:

  • 枚举逻辑性能不达标,无法应对大输入场景
    代码采用两层嵌套循环枚举两个骰子的所有投掷组合,时间复杂度为O(nm),空间复杂度同样为O(nm)。当输入的骰子面数升高到千级以上时,存储所有和值的列表会占用超阈值内存触发溢出,整体运行时间远超评测时限。
    两个骰子的和值分布有固定数学规律:设两个骰子面数为n、m,满足n≤m时,和值的出现次数从和值2开始逐次递增,到和值n+1时达到峰值n,保持峰值不变直到和值m+1,之后逐次递减到和值n+m。所有出现次数为峰值的和值构成区间[n+1, m+1],完全不需要枚举所有组合,O(1)时间即可定位结果。
  • 频率统计逻辑复杂度超标
    代码将所有和值转为字符串存入列表,再循环调用Collections.frequency逐个统计元素出现次数。该方法本身需要全量遍历列表完成统计,整段流程的时间复杂度飙升至O((n*m)^2),输入稍大就会超时。
  • 输出顺序不符合题目要求
    代码最终使用HashSet对结果去重,HashSet是无序容器,无法保证输出的和值按升序排列,会直接触发格式判题错误。
  • 结果判定缺乏校验逻辑
    代码直接将出现次数的峰值固定为两个骰子面数的较小值,虽然正常输入下该值正确,但未对实际频率分布做最大值校验,遇到骰子面数为1、0这类边界输入时,会输出错误结果。
  • 输入解析健壮性不足
    代码通过单空格分割输入字符串,当输入存在连续分隔空格、前后缀空格时,split会生成空字符串元素,直接触发数字解析异常导致程序崩溃。

内容的提问来源于stack exchange,提问作者astrae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 18:15:03