CF821C Okabe and Boxes

时间:2023-03-08 22:17:58

题目链接

题目大意

模拟栈的操作,要求从1~n依次弹出,若不符合可以排序,且不会有不合法情况,求最少排序次数。

思路

由于一定没有不合法情况,所以每次不符合顺序时可以直接清空,遇到栈为空时仍然要求弹出,则说明这个数已经提前弹出了。

 #include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int>v;
int n,now=,ans;
char ch[];
int main()
{
scanf("%d",&n);
int t;
for(int i=;i<=*n;i++)
{
scanf("%s",&ch);
if(ch[]=='a')
{
scanf("%d",&t);
v.push_back(t);
}
else
{
if(!v.empty())
{
if(v.back()!=now)
{
v.clear();
ans++;
}
else
v.pop_back();
}
now++;
}
}
printf("%d\n",ans);
return ;
}