题意:有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;
}