CF821C Okabe and Boxes

题目链接

题目大意

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

思路

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

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<vector>
 4 using namespace std;
 5 vector<int>v;
 6 int n,now=1,ans;
 7 char ch[11];
 8 int main()
 9 {
10     scanf("%d",&n);
11     int t;
12     for(int i=1;i<=2*n;i++)
13     {
14         scanf("%s",&ch);
15         if(ch[0]=='a')
16         {
17             scanf("%d",&t);
18             v.push_back(t);
19         }
20         else
21         {
22             if(!v.empty())
23             {
24                 if(v.back()!=now)
25                 {
26                     v.clear();
27                     ans++;
28                 }
29                 else
30                     v.pop_back();
31             }
32             now++;
33         }
34     }
35     printf("%d\n",ans);
36     return 0;
37 }

猜你喜欢

转载自www.cnblogs.com/rlt1296/p/9350620.html