题意:给出若干个数,每次选两个数减1,那么是否可以让最后所有的数都变成0
思路:抽屉原理,选出最大的数maxn,和计算出所有数sum如果sum为奇数那么不可能有这种方法,假设有maxn个抽屉,然后剩下的从第一个抽屉到最一个抽屉来回放,那么一个抽屉里不可能会有重复的数字,然后我们就会发现如果剩下的数可以放满一轮抽屉那么就一定可以每次从抽屉取两个然后把所有的抽屉里的东西取空
#include <stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
int main(int argc, char *argv[])
{
int n;
while(cin>>n)
{
ll sum=0,maxn=-1;
int i;
ll a;
for(i=0;i<n;i++)
{
cin>>a;
sum+=a;
maxn=max(maxn,a);
}
if(sum%2==1)
printf("No\n");
else
{
if(sum-maxn>=maxn)
{
printf("Yes\n");
}
else
printf("No\n");
}
}
return 0;
}
本文探讨了利用抽屉原理解决一类数学问题的方法:通过选择数列中的两个数进行减一操作,判断是否能使数列中所有元素变为零。文章详细解释了算法的实现思路,并提供了C++代码示例。
205

被折叠的 条评论
为什么被折叠?



