分苹果

分苹果

有A,B两个同学想要分苹果。A的想法是使用二进制进行,1 + 1相加不进一位,如(9 + 5 = 1001 +101 = 12)。B同学的想法是使用十进制进行,并且进一位。 会输入两组数据,一组是苹果总数,一组分别是每个苹果的重量。如果让B同学在满足A同学的情况下获取到苹果的总重量且返回,如果不能则返回-1。

输入

3

3 5 6

返回

11

备注:按照A同学的想法 5 + 6 = 3 (101 + 110 = 010)

思路:

对于 a 来说是平分

5 + 6 = (101 + 110 = 010) = 3

对于 b 来说 5 + 6 = (101 + 110) = 1011 = 11

1,如果最终有解,那么所有数字的异或结果为0(两个相同数字异或是0),最终答案就是 所有数字的十进制和,减去这些数字里的最小值就是了。

2,如果无解,那么所有数字的异或结果非零,直接返回-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;

int main(){
int n;
cin >> n;
int minApple = INT_MAX;
int res = 0;
int sum = 0;
for(int i = 0; i < n; i++){
int apple;
cin >> apple;
sum += apple;
if(apple < minApple){
minApple = apple;
}
//全部数求异或(相同为0,不同为1)
res = res ^ apple;
}
//代表符合 a 的情况
if(res == 0){
cout << sum - minApple << endl;
}else{
cout << -1 << endl;
}
return 0;
}