为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。
今年的最大目标就是能为【一亿技术人】创造更高的价值。
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
C++
#include <stdio.h>
#include <math.h>
int T, S, n, A[200010];
int main() {
scanf("%d", &T);
while (T--) {
S = 0;
scanf("%d", &n);
for (int i = 0; i < n; ++i)
scanf("%d", &A[i]), S ^= A[i];
if (S) {
int k = log2(S), a = 0;
for (int i = 0; i < n; ++i) if (A[i] >> k & 1) ++a;
if (n & 1 || a == 1) printf("1\n");
else printf("-1\n");
} else printf("0\n");
}
}
Java
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) { new Main().run(); }
void run() {
InputReader in = new InputReader(System.in);
PrintWriter out = new PrintWriter(System.out);
int T = in.readInt(), S, n, a;
int[] A = new int[21];
while (T-- > 0) {
S = 0;
n = in.readInt();
Arrays.fill(A, 0);
boolean flag = (n & 1) == 1;
while (n-- > 0) {
S ^= a = in.readInt();
for (int i = 0; i <= 20; i++)
if ((a >> i & 1) == 1) A[i]++;
}
if (S == 0) out.println("0");
else if (A[floorLog2(S)] == 1 || flag) out.println("1");
else out.println("-1");
}
out.flush();
}
int highBit(int a) {
a |= a >> 1;
a |= a >> 2;
a |= a >> 4;
a |= a >> 8;
a |= a >> 16;
return a - (a >>> 1);
}
int[] FLOOR_LOG2_TABLE = { 0, 0, 1, 26, 2, 23, 27, 32, 3, 16, 24, 30, 28, 11, 33, 13, 4, 7, 17, 35, 25, 22, 31, 15, 29, 10, 12, 6, 34, 21, 14, 9, 5, 20, 8, 19, 18 };
int floorLog2(int a) { return FLOOR_LOG2_TABLE[highBit(a) % 37]; }
class InputReader {
BufferedReader reader;
StringTokenizer token;
InputReader(InputStream in) {
this.reader = new BufferedReader(new InputStreamReader(in));
}
String read() {
while (token == null || !token.hasMoreTokens()) {
try {
token = new StringTokenizer(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return token.nextToken();
}
int readInt() { return Integer.parseInt(read()); }
}
}