题目:http://codeforces.com/problemset/problem/433/A
题意:
你是我的小呀小苹果,怎么爱你都不嫌多~分苹果啦分苹果啦,总共有n个苹果,重量有100克和200克,一向追求公平的Kitahara Haruki 开始分苹果,
请你判断他是否能做到公平的分苹果呢
题解:
求出100克 的数量sum1和200克的数量sum2,如果sum1和sum2都是偶数,肯定是能,如果sum1是奇数
或者只有一个苹果肯定是不能啦,若sum1是偶数我们就要判断sum2的奇偶性了,后面小编不说大家也应该
想到了吧,这题需要你的细心哦
代码如下:
#include <stdio.h>
int main()
{
int n,i,sum1,sum2,sum;
int a[105];
while(~scanf("%d",&n))
{
sum1 = sum2 = sum = 0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i] == 100) sum1++;
else sum2++;
}
if(n==1)
{
printf("NO\n");break;
}
if(sum1%2!=0)
printf("NO\n");
else
{
if(sum2%2!=0 && sum1==0)
printf("NO\n");
else
printf("YES\n");
}
}
return 0;
}
后来有人控诉小编这个方法未免繁琐,然后又给出了新的一方案,那就是老老实实来,
将苹果重量进行排序:100 100 ……200 200 200,然后开始分苹果,重量少了就加苹果,最后判断两人苹果重量是否一致就行了
代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int t,i,x,y,a[105];
while(~scanf("%d",&t))
{
x=0;
y=0;
for(i=0;i<t;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+t);
for(i=t-1;i>=0;i--)
{
if(x>=y)
y+=a[i];
else
x+=a[i];
}
if(x==y)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}