题目描述:
给定一个整数 n,它可以被表示为一个 k 位的 b 进制数,如下所示:
举例说明,如果 b=17,k=3,a=[11,15,7],那么
请你判断 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
思路:因为直接暴力会超时,所以要换个角度思考。
题目最后输出的是“判断n是奇数还是偶数”,根据多项式,一个奇数的k次方还是奇数,所以
如果b是奇数,求多项式的和就转变为a1b+a2b+…+b;
如果b是偶数,多项式的前n-1个数的和一定是偶数,最后只要判断b是奇数还是偶数
相关代码如下:
#include <iostream>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int b,k;
cin>>b>>k;
int sum = 0;
int flag = 0;
for(int i=0;i<k;i++){
int x;
cin>>x;
if(i <= k-2){k
sum += x*b; //记录前k-1个数的和
}
else
flag = x; //记录最后一个数
}
int res;
res = flag;
if(b % 2){
res = sum + flag;
}
if(res % 2){
cout<<"odd"<<endl;
}
else{
cout<<"even"<<endl;
}
}
return 0;
}