2402_88462578 2024-10-26 09:36 采纳率: 0%
浏览 18

下一题 标记 执行结果 自测输入 搜索

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
输出描述
输出一个非负整数,代表可以成功平分彼此的苹果、橘子的学生对数

  • 写回答

1条回答 默认 最新

  • 趣享先生 优质创作者: 编程框架技术领域 2024-10-26 10:16
    关注

    ♥ 该回答引用于ChatGPT,如若有用,还请题主采纳!♥

    要解决这个问题,我们需要找出所有满足条件的学生对 ((i, j)),使得第 (i) 个学生和第 (j) 个学生的苹果和橘子的总和都是偶数。

    条件分析

    1. 苹果的总和为偶数:(a_i + a_j) 是偶数。
    2. 橘子的总和为偶数:(b_i + b_j) 是偶数。

    这两个条件可以简化为:

    • (a_i % 2) 和 (a_j % 2) 相同(即都是偶数或都是奇数)。
    • (b_i % 2) 和 (b_j % 2) 相同(即都是偶数或都是奇数)。

    分类

    我们可以将每个学生的苹果和橘子的数量根据奇偶性分为四类:

    1. (偶, 偶)
    2. (偶, 奇)
    3. (奇, 偶)
    4. (奇, 奇)

    计数

    我们只需要统计每一类的学生数量,然后计算可以组成的对数。对于每一类,若有 (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),只使用了固定大小的数组来存储计数。

    这种方法高效且易于理解,适合处理给定的输入范围。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月26日