题解 CF1230A 【Dawid and Bags of Candies】

Nickel_Angel

2019-09-24 19:08:43

Solution

~~由于被降智打击了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; } ```