0/3”现在是学校的午餐时间,学校准备了很多苹果、橘子来当作营养 C++
午餐的水果。总共有n个学生,第i个学生分到了a个苹果, #include
以及b;个橘子。 using nam
例1 请问有多少对学生,可以成功平分彼此的苹果和橘子。准确来
3
例2 讲,就是要你算出有多少对(i,j)满足: int main() int a,
例3 1.1≤i<j≤N 6 while COU
2.第i个学生跟第j个学生可以成功平分彼此的苹果、橘子。 8
("可以平分”表示两个人“苹果的数目总和为偶数,且橘子 9
的数目总和为偶数")。 10 64位输出
2
输入描述
3
第一行输入一个正整数n,代表学校的学生数量
接下来n行,每行两个正整数ai,bi,代表第i个学生拥有的苹果、橘子数量.1≤n≤1051≤a,b,≤109
输出描述
输出一个非负整数,代表可以成功平分彼此的苹果、橘子的学生对数
下一题 标记 执行结果 自测输入 搜索
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注♥ 该回答引用于ChatGPT,如若有用,还请题主采纳!♥
要解决这个问题,我们需要找出所有满足条件的学生对 ((i, j)),使得第 (i) 个学生和第 (j) 个学生的苹果和橘子的总和都是偶数。
条件分析
- 苹果的总和为偶数:(a_i + a_j) 是偶数。
- 橘子的总和为偶数:(b_i + b_j) 是偶数。
这两个条件可以简化为:
- (a_i % 2) 和 (a_j % 2) 相同(即都是偶数或都是奇数)。
- (b_i % 2) 和 (b_j % 2) 相同(即都是偶数或都是奇数)。
分类
我们可以将每个学生的苹果和橘子的数量根据奇偶性分为四类:
- (偶, 偶)
- (偶, 奇)
- (奇, 偶)
- (奇, 奇)
计数
我们只需要统计每一类的学生数量,然后计算可以组成的对数。对于每一类,若有 (k) 个学生,则可以从中选择两个学生的组合数为 (C(k, 2) = \frac{k(k-1)}{2})。
实现代码
以下是实现的 Python 代码:
def count_pairs(n, students): # 统计四类学生的数量 count = [0] * 4 # [偶,偶], [偶,奇], [奇,偶], [奇,奇] for a, b in students: a_parity = a % 2 b_parity = b % 2 count[a_parity * 2 + b_parity] += 1 # 计算可以组成的对数 total_pairs = 0 for k in count: total_pairs += k * (k - 1) // 2 return total_pairs # 输入处理 n = int(input()) students = [tuple(map(int, input().split())) for _ in range(n)] # 输出结果 print(count_pairs(n, students))输入输出示例
输入
3 1 2 2 3 3 4输出
1解释
在这个示例中,只有一对学生(第 1 和第 3 个学生)可以成功平分彼此的苹果和橘子。
复杂度分析
- 时间复杂度:O(n),因为我们只需遍历一次学生列表。
- 空间复杂度:O(1),只使用了固定大小的数组来存储计数。
这种方法高效且易于理解,适合处理给定的输入范围。
评论 打赏 举报解决 1无用