今天打牛客网网络赛的时候,居然连这个题目也没过?感觉自己好水啊。

【题目链接】

题目描述

集训队暑训的时候,是睡在机房的,有几个小伙子不甘寂寞,带了仓鼠来机房。有的还不止带了一只!
为此,贴心的集训队刘队长买了一大一小两种放仓鼠笼子的架子,大的可以放两个仓鼠笼 小的只能放一个。
要注意的是仓鼠是领地动物,一般来讲 仓鼠笼与仓鼠笼之间是不能贴在一起的,
但同一个人带来的仓鼠的仓鼠笼可以被放在一起(既两个仓鼠笼如果属于同一个人,那么这两个仓鼠笼就可以被放在同一个大架子上)
现在告诉你现有的两种架子的数量和多少人带了仓鼠以及每个人带的仓鼠的数量,问你是否能将这些仓鼠放下。

输入描述:

第一行为一个数T 表示测试样例组数
对于每组测试数据
第1行输入a,b,n; 分别为小架子的数量,大架子的数量,带了仓鼠的人数
第2行有n个数字P1-Pn,分别表示每个人带的仓鼠的数量

输出描述:

如果放得下 则输出”Yes” 否则输出”No”

示例1

输入

1
1 2 4
1 1 1 1

输出

No


#include<iostream>
using namespace std;
int main()
{
    int i,n,a,b,k,temp;
    cin>>n;
    while (n--)
    {
        cin>>b>>a>>k;
        int big=0,small=0;
        for (i=0;i<k;i++)
        {
            cin>>temp;
            big+=temp/2;   //他带来的仓鼠需要的大笼子数量的理论值
            small+=temp%2; //他带来的仓鼠需要的小笼子数量的理论值
        }
        if (big<=a)
        small+=big-a;      //如果大笼子的理论值小于实际值,将多余的大笼子数都加到小笼子数量里去
        else
        small+=(big-a)*2;  //反之,需要两个小笼子凑成一个大笼子,
                           // 所以小笼子数量等于之前小笼子的数量减去大笼子缺少值的两倍。
        //判断小笼子是否足够。
        if (small<=b)
        cout<<"Yes"<<endl;
        else
        cout<<"No"<<endl;
    }
}