传送门Codeforces Round #248 (Div. 2) A - Kitahara Haruki's Gift
好悲剧啊。。一开始我准备暴力过的,竟然错了,但是无论如何也找不出错在哪里。
刚才又看了一遍,才发现判断出错了。本来我想如果超过sum的一半还没找到答案就输出NO,可是这只是当前的i条件下的NO,后面还有好多i呢。。哎。。我捉急的逻辑能力。
后来一个同学也给了我一个解法,如果100的个数是2的倍数,就是YES,当100的个数为0时,200的个数是偶数就YES,其他都是NO。
1.暴力法
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
//freopen("input.txt", "r", stdin);
int n, ocnt, tcnt, sum, a;
while (~scanf("%d", &n))
{
ocnt = tcnt = sum = 0;
bool flag = false;
for (int i = 0; i < n; i++)
{
scanf("%d", &a);
if (a == 100)
ocnt++;
else
tcnt++;
sum += a;
}
sum /= 2;
for (int i = 0; i <= ocnt; i++)
{
if (flag)
break;
for (int j = 0; j <= tcnt; j++)
{
if (100 * i + 200 * j == sum)
{
printf("YES\n");
flag = true;
break;
}
}
}
if (!flag)
printf("NO\n");
}
return 0;
}
2.
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
//freopen("input.txt", "r", stdin);
int n, ocnt, tcnt, a;
while (~scanf("%d", &n))
{
ocnt = tcnt = 0;
bool flag = false;
for (int i = 0; i < n; i++)
{
scanf("%d", &a);
if (a == 100)
ocnt++;
else
tcnt++;
}
if (ocnt == 0)
{
if (tcnt % 2 == 0)
printf("YES\n");
else
printf("NO\n");
continue;
}
if (!(ocnt % 2))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}