题解 CF1230A 【Dawid and Bags of Candies】
Nickel_Angel
2019-09-24 19:08:43
~~由于被降智打击了QAQ……特此写此题解警示后人~~
题目很简单,就是给定四个数,问是否能将这四个数分为两组使得两组数的和相等。
考虑到要使这四个数分为两组使得两组数的和相等只有两种情况:
1.最大的数和最小的数的和等于另外两个数之和;
2.最大的数等于其它三个数之和。
故我们可以将这四个数 $a_1,a_2,a_3,a_4$ 从小到大排序。后直接判断 $a_1 + a_4 = a_2 + a_3,a_1 + a_2 + a_3 = a_4$ 是否成立即可。
~~比赛时只想到依次枚举两个数,判断另外两个数的和是否与这两个数相等,没有考虑三个数的和等于另外一个的情况,然后我就死掉了QAQ~~
附上代码:
```cpp
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
namespace Primary
{
int a[4];
void main()
{
scanf("%d%d%d%d", a, a + 1, a + 2, a + 3);
sort(a, a + 4);
if (a[0] + a[3] == a[1] + a[2] || a[0] + a[1] + a[2] == a[3])
puts("YES");
else puts("NO");
}
}
int main()
{
Primary::main();
return 0;
}
```