ABC333E 题解
题目传送门。
思路
从后往前扫一遍,如果遇到怪兽就使该种类怪兽的
如果最后还有某种怪兽等待消灭,输出
否则,再次模拟,输出
证明答案最小
因为每一瓶药水在该策略下都不会被浪费,所以是最小的。
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】