codeforces 420-C. Okabe and Boxes
2017-10-10 10:24
471 查看
题意:给你n个数还有2*n个指令,当遇到add的时候就把当前的数压入栈顶中,当遇到remove的时候去除栈顶的数,但是这里有一个限制就是在取出栈顶数的时候,要按照1-n的顺序取出数,所以在取出一些数的时候要重新排列栈里的元素,问你按照顺序取出1-n最少需要重新排列栈里的元素几次
思路:每当遇到一个remove的时候我们就看离他最近的一个add压入栈里的数是不是需要取出的数,如果是需要取出的数直接让该数出栈,如果不是我们就重新排列一次,取出需要取出的数,这个时候我们是把数按照循序放入一个优先队列里面,后add的数先出队列,这样我们在重新排列一次之后就把队列清空,这样就可以保证排列的次数最少。
代码如下:
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
#include <cstdio>
using namespace std;
struct point
{
int value;
int pos;
point (int a,int b)
{
value=a;
pos=b;
}
point() {}
bool operator<(point p1)const
{
return pos<p1.pos;
}
};
int main()
{
int n;
int cur=1;
int ans=0;
int f=0;
scanf("%d",&n);
int nn=0;
priority_queue<point> p;
for(int i=0; i<2*n; i++)
{
string order;
int x;
cin>>order;
if(order=="add")
{
cin>>x;
f=0;
nn++;
p.push(point(x,nn));
}
if(order=="remove")
{
if(p.empty())
{
cur++;
continue;
}
point temp=p.top();
if(f)
{
cur++;
continue;
}
else
{
if(temp.value==cur)
{
cur++;
p.pop();
}
else
{
ans++;
cur++;
f=1;
while(!p.empty())
{
p.pop();
}
}
}
}
}
cout<<ans<<endl;
return 0;
}
思路:每当遇到一个remove的时候我们就看离他最近的一个add压入栈里的数是不是需要取出的数,如果是需要取出的数直接让该数出栈,如果不是我们就重新排列一次,取出需要取出的数,这个时候我们是把数按照循序放入一个优先队列里面,后add的数先出队列,这样我们在重新排列一次之后就把队列清空,这样就可以保证排列的次数最少。
代码如下:
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
#include <cstdio>
using namespace std;
struct point
{
int value;
int pos;
point (int a,int b)
{
value=a;
pos=b;
}
point() {}
bool operator<(point p1)const
{
return pos<p1.pos;
}
};
int main()
{
int n;
int cur=1;
int ans=0;
int f=0;
scanf("%d",&n);
int nn=0;
priority_queue<point> p;
for(int i=0; i<2*n; i++)
{
string order;
int x;
cin>>order;
if(order=="add")
{
cin>>x;
f=0;
nn++;
p.push(point(x,nn));
}
if(order=="remove")
{
if(p.empty())
{
cur++;
continue;
}
point temp=p.top();
if(f)
{
cur++;
continue;
}
else
{
if(temp.value==cur)
{
cur++;
p.pop();
}
else
{
ans++;
cur++;
f=1;
while(!p.empty())
{
p.pop();
}
}
}
}
}
cout<<ans<<endl;
return 0;
}
相关文章推荐
- codeforces 420 div2 C Okabe and Boxes
- 栈 Okabe and Boxes:CodeForces - 821C
- codeforces -420-B. Okabe and Banana Trees
- #420 C. Okabe and Boxes(Div.2)
- Codeforces 821 C. Okabe and Boxes
- Codeforces#420 C. Okabe and Boxes
- coderforces round#420-C Okabe and Boxes
- Codeforces Round #420 C. Okabe and Boxes
- Codeforces 821C-Okabe and Boxes
- CodeForces - 260C Balls and Boxes(模拟)
- Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo DP+矩阵快速幂加速
- C. Okabe and Boxes
- Codeforces Round #420 (Div. 2) D. Okabe and City (最短路)
- codeforce C. Okabe and Boxes
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
- Codeforces 821 A. Okabe and Future Gadget Laboratory
- Codeforces 821 B. Okabe and Banana Trees
- CF-Codeforces Round #420 (Div. 2)-C-Okabe and Boxes
- 821C - Okabe and Boxes ——优先队列+手动模拟栈
- Codeforces 821 E. Okabe and El Psy Kongroo