Run ID | 作者 | 问题 | 语言 | 测评结果 | Time | Memory | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
108955 | 彭士宝 | 求和比较 | Python3 | Wrong Answer | 40 MS | 3800 KB | 1010 | 2025-01-23 17:19:23 |
def count_split_schemes(N, M): total_sum = N * (N + 1) // 2 # 计算从1到N的总和 # 如果 (total_sum + M) 或 (total_sum - M) 不是偶数,则无解 if (total_sum + M) % 2 != 0: return 0 sum1 = (total_sum + M) // 2 sum2 = (total_sum - M) // 2 # dp[j] 表示是否存在一个子数组的和为 j dp = [0] * (total_sum + 1) dp[0] = 1 # 初始化:和为0的子数组有1种(空集) # 动态规划计算所有可能的子数组和 for i in range(1, N + 1): for j in range(total_sum, i - 1, -1): dp[j] += dp[j - i] # 统计满足条件的方案数 count = 0 if sum1 <= total_sum: count += dp[sum1] if sum2 <= total_sum: count += dp[sum2] # 如果 sum1 == sum2,需要减去重复计算的方案 if sum1 == sum2: count //= 2 return count # 输入处理 N, M = map(int, input().split()) result = count_split_schemes(N, M) print(result)
------Input------
5 3
------Answer-----
3
------Your output-----
6