兔子吃胡萝卜:分配问题算法解析

小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;
}

算法思路

  1. 首先计算所有胡萝卜的总数sum,判断sum是否能被兔子数量n整除。如果不能整除,则不存在方案,直接输出'NO'。
  2. 如果sum能被n整除,则计算每只兔子应该得到的胡萝卜数量t = sum / n。
  3. 遍历所有胡萝卜包,判断每个胡萝卜包中的胡萝卜数量a'i'是否大于t。如果存在a'i' > t,则不存在方案,直接输出'NO'。
  4. 如果所有胡萝卜包中的胡萝卜数量都小于等于t,则存在方案,输出'YES'。

总结

本题考察了简单的数学运算和循环判断,是一个比较基础的算法问题。通过学习本题,可以了解如何用代码实现简单的分配问题,并掌握一些基本的算法技巧。

兔子吃胡萝卜:分配问题算法解析

原文地址: https://www.cveoy.top/t/topic/mGXR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录