专栏文章

题解:P12249 [科大国创杯初中组 2025] 果汁

P12249题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipjsmfc
此快照首次捕获于
2025/12/03 13:09
3 个月前
此快照最后确认于
2025/12/03 13:09
3 个月前
查看原文

思路

考虑贪心。
我们读题可知,aia_i 单调递增,这可以让我们免去一些复杂的代码。
然后,我们换一个想法,我们把 ViV_i 看作是还能装下多少单位果汁,然后我们分类讨论三种可能:
  1. Vai,Vai+1V_{a_i},V_{a_i+1} 均大于 00,那么我们倒后面的,因为后面的不可能再到前面了,这样果汁都会集中在一些杯子里。
  2. VaiV_{a_i} 大于 00 但是 Vai+1V_{a_i+1} 不大于 00 或者 VaiV_{a_i} 不大于 00 但是 Vai+1V_{a_i+1} 大于 00,那么我们倒还能倒的那一杯。
  3. Vai,Vai+1V_{a_i},V_{a_i+1} 均不大于 00,那么我们可爱的小奶龙就可以开喝了,也就是答案加 11

代码

CPP
#include<bits/stdc++.h>
using namespace std;
const int N=3e4+7;
int T,n,m,v[N],a[N],ans;
int main()
{
	cin>>T;
	while(T--){
		cin>>n>>m;
		for(int i=1;i<=m;i++)
			cin>>v[i];
		for(int i=1;i<=n;i++)
			cin>>a[i];
		ans=0;//记得多测清空
		for(int i=1;i<=n;i++){
			if(v[a[i]]&&v[a[i]+1])v[a[i]+1]--;
			else if(v[a[i]])v[a[i]]--;
			else if(v[a[i]+1])v[a[i]+1]--;
			else ans++;
		}
		cout<<ans<<endl;
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...