酷代码 AI
菜单

题目描述 给定一个集合 A={a1,a2,…,an},请判断能否把 A 划分为两个非空的集合 S1 与 S2, 使得 S1 中所有元素的和的奇偶性与 S2 中所有元素的和的奇偶性相同? 输入 本题有多组测试用例。 第一行输入一个正整数 T T, 表述测试用例组数。 对于每组测试用例,第一行输入一个整数 n n 表示集合 A A 中元素数量,第二行输入 n n 个用空格分隔的整数 a 1 , a 2 , … , a n a 1 ,a 2 ,…,a n 表示 A A 中的元素。 输出 对于每组测试用例,输出一行 Yes 或 No,表示判断结果。 样例输入 复制 2 3 1 2 3 3 1 2 2 样例输出 复制 Yes No 提示 对于所有数据,保证 1≤T≤10^5, 2≤n≤10^5,1≤ai≤10^9。

下面是用于解决该问题的 Python 代码: ```python T = int(input()) for _ in range(T): n = int(input()) elements = list(map(int, input().split())) total_sum = sum(elements) odd_count = 0 for num in elements: if num % 2 == 1: odd_count += 1 if odd_count % 2 == 0 and odd_count != 0: print('Yes') else: print('No') ``` 代码解释 1. 输入处理: - 首先读取测试用例的组数 `T`。 - 对于每组测试用例,读取集合中元素的数量 `n`,然后读取 `n` 个整数组成的集合元素列表 `elements`。 2. 计算总和与奇数个数: - 计算集合中所有元素的总和 `total_sum`。 - 遍历集合中的每个元素,统计奇数元素的个数 `odd_count`。 3. 判断并输出结果: - 若奇数元素的个数是偶数且不为 0,那么就能够把集合划分为两个非空集合,使得它们元素和的奇偶性相同,输出 `Yes`。 - 否则输出 `No`。 原理说明 集合中元素和的奇偶性由其中奇数的个数决定。当把集合划分为两个非空集合 `S1` 和 `S2` 时: - 若集合中奇数的个数为偶数且不为 0,就总可以把奇数元素分配到两个集合中,让两个集合中奇数元素个数都为偶数,进而使两个集合元素和的奇偶性相同。 - 若集合中奇数的个数为奇数,不管怎么划分,两个集合中元素和的奇偶性必定不同。若奇数个数为 0,集合元素全为偶数,因为要划分为非空集合,也无法保证两个集合元素和的奇偶性相同(例如一个集合只有一个元素,另一个集合有多个元素时奇偶性情况会不同)。 复杂度分析 - 时间复杂度:$O(Tn)$,其中 $T$ 是测试用例的组数,$n$ 是集合中元素的数量。对于每组测试用例,需要遍历集合一次来统计奇数的个数。 - 空间复杂度:$O(n)$,主要用于存储集合中的元素。 [2025-12-10 17:55:55 | AI问答 | 546点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多