Codeforces 821C Okabe and Boxes 思维模拟

来源:互联网 发布:2017年云计算500强 编辑:程序博客网 时间:2024/05/01 22:52

传送门:codeforces 821C

题意:给定两种操作,一种是‘add  x’,将x放到栈顶,一种是remove,将栈顶移除,但是移除的顺序必须是从1到n,操作过程中可以将栈内元素顺序重排,问至少重排几次才能满足移除的顺序。

思路:只想到每次不满足就暴力排序。。虽然明知道会超时还是勇敢的交了一发。

正解:我们完全可以将排序的过程省去,每次要是需要排序了,我们就可以将栈清空,以后再remove的时候如果栈是空的就说明可以直接remove掉,因为题目保证了要remove的元素一定已经add进栈了。

代码:

#include<bits/stdc++.h>using namespace std;#define ll long longint q[300005];int main(){    string s;    int n,id,t=1,ans=0,top=0;    cin>>n;    n<<=1;    while(n--)    {        cin>>s;        if(s=="add")        {            cin>>id;            q[top++]=id;        }        else        {            if(!top){t++;continue;};            if(q[top-1]==t)            {                t++;                top--;            }            else            {                ans++;//                top=0;                t++;            }        }    }    cout<<ans;    return 0;}


原创粉丝点击