J - Candy Gym - 100712J

题意:有N个孩子,M袋糖果,每袋糖果中有不同数量的糖果。把这些糖果分给N个孩子,要求年龄大的孩子分得的糖果比年龄小的孩子多,年龄一样的孩子分得的糖果一样多。如果可以这样分配输出YES,否则输出NO。

题意:将糖果从数量多的那一袋开始匹配,匹配的孩子的年龄从大到小。如何匹配完后还剩糖果,则是可行的,因为可以将剩下的糖果全部都给年龄最大的那个孩子。如果孩子没有匹配完糖果就没了,则不能分配。

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    int t,n,m,a[205],b[205];
    scanf("%d",&t);
    while(t--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        scanf("%d%d",&n,&m);
        for(int i = 1;i <= n;i++)
        {
            int x;
            scanf("%d",&x);
            a[x]++;
        }
        for(int i = 1;i <= m;i++)
        {
            int x;
            scanf("%d",&x);
            b[x]++;
        }
        int i = 20,j = 55;
        while(i)
        {
            while(!a[i] && i)
            {
                i--;
            }
            while(a[i] > b[j])
            {
                if(j == 0) break;
                j--;
            }
            if(!j) break;
            i--,j--;
        }
        if(i <= 0) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/eric_chen_song_lin/article/details/81172485