兔子吃胡萝卜:分配问题算法解析
兔子吃胡萝卜:分配问题算法解析
小Z饲养了n只兔子,这天他想喂他的兔子们一些胡萝卜。他有m包胡萝卜,第i包有a'i'根胡萝卜。小Z想要从这些胡萝卜包中选择一些,然后将这些胡萝卜全部分给兔子们,并且每只兔子得到的胡萝卜一样多。小Z想知道,是否存在一种非空的选取方案,使得每只兔子可以获得一样多的胡萝卜。
输入格式:
第一行两个整数n,m(1≤n,m≤1000) 第二行m个整数,第i个整数表示a'i'(1≤a'i'≤10⁹)
输出格式:
如果存在合法的方案,输出'YES',否则输出'NO',输出时不需要带引号。
输入样例:
100 4 1 50.98 150
输出样例:
YES
代码实现(C++)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
int a[N],sum,n,m;
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>a[i];
sum+=a[i];
}
if(sum%n==0){
int t=sum/n;
for(int i=0;i<m;i++)
if(a[i]>t){
puts("NO");
return 0;
}
puts("YES");
}else puts("NO");
return 0;
}
算法思路
- 首先计算所有胡萝卜的总数sum,判断sum是否能被兔子数量n整除。如果不能整除,则不存在方案,直接输出'NO'。
- 如果sum能被n整除,则计算每只兔子应该得到的胡萝卜数量t = sum / n。
- 遍历所有胡萝卜包,判断每个胡萝卜包中的胡萝卜数量a'i'是否大于t。如果存在a'i' > t,则不存在方案,直接输出'NO'。
- 如果所有胡萝卜包中的胡萝卜数量都小于等于t,则存在方案,输出'YES'。
总结
本题考察了简单的数学运算和循环判断,是一个比较基础的算法问题。通过学习本题,可以了解如何用代码实现简单的分配问题,并掌握一些基本的算法技巧。
原文地址: https://www.cveoy.top/t/topic/mGXR 著作权归作者所有。请勿转载和采集!