2018年长沙理工大学第十三届程序设计竞赛 L-仓鼠养殖计划

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

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

输入描述:

第一行为一个数T 表示测试样例组数

对于每组测试数据

第1行输入a,b,n; 分别为小架子的数量,大架子的数量,带了仓鼠的人数

第2行有n个数字P
1
-P
n
,分别表示每个人带的仓鼠的数量

输出描述:

如果放得下 则输出"Yes" 否则输出"No"
示例1

输入

1
1 2 4
1 1 1 1

输出

No

备注:

1<=n<=50 1<=a,b<=100  1<=Pi<=20

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cstring>
 4 #include <string.h>
 5 #include <math.h>
 6 using namespace std;
 7 
 8 int main()
 9 {
10     long long t,p[55],a,b,n,k,s,i;
11     cin>>t;
12     while(t--)
13     {
14         cin>>a>>b>>n;
15         k=1;
16         for(i=0;i<n;i++)
17             cin>>p[i];
18         for(i=0;i<n;i++)
19         {
20             s=p[i]/2;
21             if(b>=s&&s>0)
22             {
23                 b=b-s;
24                 p[i]=p[i]-2*s;
25             }
26             if(b<s)
27             {
28                 p[i]=p[i]-2*b;
29                 b=0;
30             }
31             if(p[i]>a)
32             {
33                 int x=p[i]-a;
34                 b=b-x;
35                 p[i]=p[i]-x;
36                 if(b<0)
37                 {
38                     k=0;
39                     break;
40                 }
41             }
42            if(p[i]<=a)
43            {
44                a=a-p[i];
45                p[i]=0;
46            }
47            else
48            {
49                k=0;
50                break;
51            }
52         }
53         if(k)
54             cout<<"Yes"<<endl;
55         else
56             cout<<"No"<<endl;
57 
58     }
59     return 0;
60 }
View Code

【分析】

    思维并不难,我主要卡在了两个点上。一,当小架子用完后需要用大架子来放的时候;二:笼子清空,应该先把仓鼠数量减去,也就是初始化的位置。其实思路大体出来了,但是心态不好,没有静下心看自己写的代码,反而浪费了更多的时间,遇到这种情况还是要仔细审核题目和代码。

posted @ 2018-04-15 22:41  子诚-  阅读(198)  评论(0编辑  收藏  举报