您的位置:首页 > 其它

Codeforces 821C Okabe and Boxes 思维模拟

2017-07-07 13:23 585 查看
传送门:codeforces 821C

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

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

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

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: