题解:P12249 [科大国创杯初中组 2025] 果汁
LittleAcbg · · 题解
由于是从左往右倒的,那么靠右的杯子满了对小奶龙更加友好(他更有可能喝到果汁)。所以我们进行贪心,每次贪心地倒入编号更大的杯子。如果编号更大的杯子已满,就倒入另一杯。如果两杯都已满,答案就可以加
#include <bits/stdc++.h>
using namespace std;
const int N = 3e4+9;
int t,n,m,v[N],a;
int main()
{
cin >> t;
while (t--) // t 组数据
{
cin >> n >> m;
for (int i = 1; i <= m; ++i) cin >> v[i]; // 容量
int ans = 0;
while (n--) // 倒 n 次,a[j] 不用存储
{
cin >> a;
if (v[a + 1]) // 编号较大的杯子还能倒,就倒
--v[a + 1]; // 倒入,剩余容量 -1
else if (v[a]) // 否则尝试编号较小的杯子
--v[a];
else // 两杯均满,喝掉
++ans; // 答案 +1
}
cout << ans << endl;
}
return 0;
}