贝茜经营的牛棚旅店中有 a 个可供一头牛入住的小牛栏和 b 个可供两头牛入住的大牛栏。
初始时,所有牛栏都是空的。
已知,今天一共有 n 波奶牛依次前来入住,每波由 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这么简单我都没写对~
- 当时对第2个牛栏的余数使用不正确
- 第一次的时候先想到了堆栈(是不合适的),使用模拟情景就可以啦!
- im soooo cabbage~~~QAQ