awcing127周赛-牛棚入住

 

贝茜经营的牛棚旅店中有 a 个可供一头牛入住的小牛栏和 b 个可供两头牛入住的大牛栏。

初始时,所有牛栏都是空的。

已知,今天一共有 n 波奶牛依次前来入住,每波由 1∼2 头奶牛组成。

如果是一头奶牛前来入住,那么:

  1. 如果有空着的小牛栏,则安排其在空着的小牛栏入住。
  2. 如果没有空着的小牛栏,则安排其在空着的大牛栏入住。
  3. 如果既没有空着的小牛栏,也没有空着的大牛栏,则安排其在仍未住满的大牛栏入住。
  4. 如果上述都没有,则将其劝离。

如果是两头奶牛前来入住,那么:

  1. 如果有空着的大牛栏,则安排它们在空着的大牛栏入住。
  2. 如果没有空着的大牛栏,则将它们劝离。

请你计算,一共有多少头奶牛会被劝离。

注意,问题是被劝离的奶牛具体数量,而不是波数。‘

输入格式

第一行包含三个整数 n,a,b

第二行包含 n 个整数 t1,t2,…,tn,其中 ti表示第 i 波奶牛的数量。

输出格式

一个整数,表示被劝离的奶牛的具体数量。

数据范围

前 33 个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤2×10^5,1≤a,b≤2×10^5,1≤ti≤2。

输入样例1:
4 1 2
1 2 1 1
输出样例1:
0
输入样例2:
4 1 1
1 1 2 1
输出样例2:
2
#include <iostream>
using namespace std;

int main() {
    int a, b, n;
    cin >> n >> a >> b;

    int c2 = 0;  // 记录大牛栏中的奶牛数量
    int x = 0;   // 记录被劝离的奶牛数量

    while (n--) {
        int cow;
        cin >> cow;

        if (cow == 1) {
            if (a > 0) {
                a--;  // 放入小牛栏
            } else if (b > 0) {
                b--;  // 放入大牛栏
                c2++;
            } else if (c2 > 0) {//有没满的大牛栏
                c2--;
            } else {
                x++;
            }
        } else if (cow == 2) {
            if (b > 0) {
                b--;  // 放入大牛栏
            } else {
                x += 2;
            }
        }
    }
    
    cout << x << endl;

    return 0;
}

注意:wuwuwuwu这么简单我都没写对~

  1. 当时对第2个牛栏的余数使用不正确
  2. 第一次的时候先想到了堆栈(是不合适的),使用模拟情景就可以啦!
  3. im soooo cabbage~~~QAQ
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值