链接: https://www.nowcoder.com/acm/contest/96/L
来源:牛客网
集训队暑训的时候,是睡在机房的,有几个小伙子不甘寂寞,带了仓鼠来机房。有的还不止带了一只!
为此,贴心的集训队刘队长买了一大一小两种放仓鼠笼子的架子,大的可以放两个仓鼠笼 小的只能放一个。
要注意的是仓鼠是领地动物,一般来讲 仓鼠笼与仓鼠笼之间是不能贴在一起的,
但同一个人带来的仓鼠的仓鼠笼可以被放在一起(既两个仓鼠笼如果属于同一个人,那么这两个仓鼠笼就可以被放在同一个大架子上)
现在告诉你现有的两种架子的数量和多少人带了仓鼠以及每个人带的仓鼠的数量,问你是否能将这些仓鼠放下。
输入描述:
第一行为一个数T 表示测试样例组数
对于每组测试数据
第1行输入a,b,n; 分别为小架子的数量,大架子的数量,带了仓鼠的人数
第2行有n个数字P1-Pn,分别表示每个人带的仓鼠的数量输出描述:
如果放得下 则输出"Yes" 否则输出"No"
链接:https://www.nowcoder.com/acm/contest/96/L 来源:牛客网
备注:
1<=n<=50 1<=a,b<=100 1<=Pi<=20
比赛的时候怎么就没想到 到了赛后看群里人说是贪心模拟一下就可以了
比赛的时候做题毅力不够 感觉很难然后就放弃 其实可以ac
思路就是先把 大的先放掉 不够的话小的笼子来补 如果大的都放不下那可以就都放不下了
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
int a[10010];
while(t--)
{
int a1,b,n;
cin>>a1>>b>>n;
int i;
int sum=0;
for(i=0;i<n;i++)
{
cin>>a[i];
int xb=0;
int cha;
if(a[i]>=2&&b>0)
{
xb=b*2;
if(a[i]<=xb)
{
cha=a[i]/2;
a[i]=a[i]%2;
b=b-cha;
}
else
{
a[i]=a[i]-xb;
b=0;
}
}
sum+=a[i];
}
if(b==0)
{
if(a1<sum)
printf("Non");
else
printf("Yesn");
}
else if(b>0)
{
a1=a1+b;
if(a1<sum)
printf("Non");
else
printf("Yesn");
}
}
return 0;
}