题目大意
模拟栈的操作,要求从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 ",ans); 36 return 0; 37 }