您将获得一个数组A1,A2 ... AN。你必须告诉多少对(i, j)存在使得1≤i<1。 j≤N且Ai XOR Aj为奇数。
Input and Output
第一行T,测试用例的数量。每 testcase:第一行N,后一行是N个整数。对于每一个 测试用例,在一行中打印所需的答案。约束
1 ≤ T ≤ 10 1 ≤ N ≤ 10^5 0 ≤ Ai ≤ 10^9
。
我的代码:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int totalTestCaseT = Integer.parseInt(reader.readLine());
StringBuilder outputOddCount = new StringBuilder();
for (int i = 0; i < totalTestCaseT; i++) {
int lengthOinputT = Integer.parseInt(reader.readLine());
String input = reader.readLine().trim();
long oddXorCount = getOddXorCount(input, lengthOinputT);
outputOddCount.append(oddXorCount);
outputOddCount.append("\n");
}
System.out.println(outputOddCount);
}
private static long getOddXorCount(String input, int lengthOinputT) {
String[] inputArray = input.split(" ");
int oddCount = 0, evenCount = 0;
for (int i = 0; i < lengthOinputT; i++) {
String lastDigit = String.valueOf((inputArray[i]
.charAt(inputArray[i].length() - 1)));
int unitDigit = Integer.parseInt(lastDigit);
if ((unitDigit & 1) == 1) {
oddCount++;
} else
evenCount++;
}
return oddCount * evenCount;
}
它适用于N的某些值但不适用于大N~100000。
最初我在没有任何函数的情况下编写它,主要类中的所有内容都是这样,并且它通过了所有测试
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
int tCases = Integer.parseInt(line);
for (int i = 0; i < tCases; i++) {
long oCount = 0, eCount = 0;
int N = Integer.parseInt(br.readLine());
String[] A = br.readLine().toString().split(" ");
for (int j = 0; j < N; j++) {
int unitDigit = Integer
.parseInt((A[j].charAt(A[j].length() - 1)) + "");
if (unitDigit % 2 == 0)
eCount++;
else
oCount++;
}
System.out.println(eCount * oCount);
}
这是我的提交 1. Submission of code 1 2. Submission of code 2
答案 0 :(得分:2)
在适用于所有输入的版本中,您使用long
来保存计数器:
long oCount = 0, eCount = 0;
在对某些输入无效的版本中,您使用int
来保存计数器:
int oddCount = 0, evenCount = 0;
也许你的int
溢出了。
例如,如果偶数的数量是所有数字的一半,则oddCount和evenCount都将为50,000。 50,000 * 50,000是2,500,000,000,大于int的最大值。因此oddCount * evenCount
会溢出。
答案 1 :(得分:0)
偶数和奇数的异或是奇数。
因此,在给定的数组[A1,A2 ... AN]中,找到偶数元素的总数和奇数元素的总数。
由于我们要找到具有奇数异或的所有对的数量,所以答案是总奇数元素和总偶数元素的乘法。
以下是我在PHP中的解决方案。
<?php
/**
* Created by PhpStorm.
* User: abhijeet
* Date: 14/05/16
* Time: 3:51 PM
* https://www.hackerearth.com/problem/algorithm/sherlock-and-xor/description/
Input and Output
First line T, the number of test cases. Each test case: first line N, followed by N integers in next line. For each testcase, print the required answer in one line.
2
3
1 2 3
4
1 2 3 4
*/
fscanf(STDIN, "%d\n", $n);
while($n--) {
fscanf(STDIN, "%d\n", $len);
$a_temp = rtrim(fgets(STDIN), "\n\r");
$a = explode(" ", $a_temp);
array_walk($a, 'intval');
$odd = 0;
$even = 0;
for($i=0; $i<$len; $i++) {
if($a[$i]%2) {
$odd++;
} else{
$even++;
}
}
echo ($odd * $even) . "\n";
}
?>