ABC333E 题解

题目传送门

思路

从后往前扫一遍,如果遇到怪兽就使该种类怪兽的 cntcnt11,反之如果遇到药水且后方有该种类的怪兽等待消灭就捡起该药水并将 ansians_i(答案的第二行)设为 11

如果最后还有某种怪兽等待消灭,输出 1-1

否则,再次模拟,输出 ppansans

证明答案最小

因为每一瓶药水在该策略下都不会被浪费,所以是最小的。

#include<iostream>
using namespace std;
int n,a[200005],b[200005],cnt[200005],ans[200005];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
	for(int i=n;i>=1;i--){
		if(a[i]==2){
			cnt[b[i]]++;
		}
		else{
			if(cnt[b[i]]){
				cnt[b[i]]--;
				ans[i]=1;
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(cnt[i]){
			cout<<-1<<endl;
			return 0;
		}
	}
	int p=0,anss=0;
	for(int i=1;i<=n;i++){
		if(a[i]==1&&ans[i]==1)p++;
		else if(a[i]==2)p--;
		anss=max(anss,p);
	}
	cout<<anss<<endl;
	for(int i=1;i<=n;i++)if(a[i]==1)cout<<ans[i]<<' ';
	return 0;
}
posted @   Weslie_qwq  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示