solo
和koko
是两兄弟
妈妈给了他们一大堆积木
每块积木上都有自己的重量
现在他们想要将这些积木分为两堆
哥哥solo
负责分配
弟弟koko
要求两个人获得的积木总重量相等
(根据koko
的逻辑),个数可以不同,不然就会哭
但koko
只会先将两个数转成二进制在进行加法
而且总会忘记进位(每个进位都会忘记)
如当25(11101)+11(1011)
时,
koko
得到的计算结果是18(10010):11001+01011=10010
solo
想要尽可能让自己得到的积木总重量最大,且不让koko
哭
第一行是一个整数N
(2 <= N <= 100)
表示有多少块积木
第二行为空格分开的N
个整数Ci
(1 <= Ci <= 10^6)
表示第i块积木的重量
让koko
不哭,输入solo
所能获得积木的最大总重量
否则输出 "No"
3
3 5 6
11
koko
不哭,输出solo
所能获得的积木的总重量,否则输出-1
11
solo
能获得重量为5
和6
的两块积木5
转成二进制为101
6
转成二进制为110
koko
的计算方法(忘记进位)11
(二进制)koko
获得重量为3
的积木转成二进制为11
solo
和koko
得到的积木的重量都是11
(二进制)solo
可以获得的积木的总重量是 5+6=11
(十进制)import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Author: Amos
* E-mail: amos@amoscloud.com
* Date: 2022/3/7
* Time: 17:01
* Description:
*/
public class Main0107 {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
while (scanner.hasNextLine()) {
int n = Integer.parseInt(scanner.nextLine().trim());
int[] arr = new int[n];
String[] split = scanner.nextLine().trim().split(" ");
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(split[i].trim());
}
String result = solution(arr);
System.out.print(result);
}
}
}
private static String solution(int[] arr) {
if (arr.length == 0 || arr.length == 1 || (arr.length == 2 && arr[0] != arr[1])) {
return "NO";
}
int min = arr[0];
int sum = min;
int temp = min;
for (int i = 1; i < arr.length; i++) {
sum += arr[i];
min = Math.min(min, arr[i]);
temp ^= arr[i];
}
if (temp != 0) {
return "NO";
} else {
return String.valueOf(sum - min);
}
}
}