1. 问题描述:
给定一个整数 n,它可以被表示为一个 k 位的 b 进制数,如下所示:
n = a1⋅ b ^ k−1 + a2⋅ b ^ k−2 + … + ak−1⋅ b + ak
举例说明,如果 b = 17,k = 3,a = [11,15,7],那么 n=11⋅172+15⋅17+7=3179+255+7=3441。请你判断 n 是奇数还是偶数。
输入格式
第一行包含整数 T,表示共有 T 组测试数据。每组数据第一行包含两个整数 b 和 k。第二行包含 k 个整数 a1,a2,…,ak。n 的 b 进制表示不含前导 0,也就是说只有 k = 1 时,a1 才有可能是 0。
输出格式
每组数据输出一行结果,n 是偶数则输出 even,奇数则输出 odd。
数据范围
1 ≤ T ≤ 10,
2 ≤ b ≤ 100,
1 ≤ k ≤ 10 ^ 5,
0 ≤ ai < b,
同一测试点内所有 k 的和不超过 10 ^ 5。
输入样例:
4
13 3
3 2 7
10 9
1 2 3 4 5 6 7 8 9
99 5
32 92 85 74 4
2 2
1 0
输出样例:
even
odd
odd
even
来源:https://www.acwing.com/problem/content/description/3803/
2. 思路分析:
分析题目可以知道我们需要求解n对应的表示式对2取余的结果,对于加法和乘法是有相应的同余关系的(可以拆开计算同余关系),由n的表达式可以知道b ^ k与b模2是同余的,所以化简一下表达式就可以得到如下图中的式子,进一步可以发现当b为偶数的时候那么只需要看ak即可,如果为奇数则看a1 + a2 + ... ak。
3. 代码如下:
class Solution:
def process(self):
T = int(input())
for c in range(T):
b, k = map(int, input().split())
a = list(map(int, input().split()))
_sum = 0
for i in range(k):
_sum += a[i]
res = _sum
if b % 2 == 0:
# b为偶数则看最后一个数字
res = a[-1]
if res % 2:
print("odd")
else:
print("even")
if __name__ == '__main__':
Solution().process()