codevs 3185-3187 队列练习x
三联水题……
3185x
题目描述 Description
给定一个队列(初始为空),只有两种操作入队和出队,现给出这些操作请输出最终的队头元素。 操作解释:1表示入队,2表示出队
输入描述 Input Description
N(操作个数)
N个操作(如果是入队则后面还会有一个入队元素)
具体见样例(输入保证队空时不会出队)
输出描述
Output Description
最终队头元素,若最终队空,输出”impossible!”(不含引号)
样例输入
Sample Input
3
1 2
1 9
2
样例输出
Sample Output
9
数据范围及提示
Data Size & Hint
对于100%的数据 N≤1000 元素均为正整数且小于等于100
分类标签 Tags 点此展开
#include<cstdio> #include<iostream> using namespace std; int n,top=0,s=0,h=0; int a[111111]; void pop() { int v; scanf("%d",&v); a[h++]=v; } void push() { top++; } int main() { int p; scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&p); if(p==1) { s++; pop(); } if(p==2) { s--; push(); } } if(s<=0) { printf("impossible!"); } else printf("%d",a[top]); return 0; }
3186x
题目描述 Description
(此题与队列练习1相比改了2处:1加强了数据 2不保证队空时不会出队)
给定一个队列(初始为空),只有两种操作入队和出队,现给出这些操作请
输出最终的队头元素。 操作解释:1表示入队,2表示出队
输入描述
Input Description
N(操作个数)
N个操作(如果是入队则后面还会有一个入队元素)
具体见样例(输入保证队空时不会出队)
输出描述
Output Description
最终队头元素,若最终队空,或队空时有出队操作,输出”impossible!”(不含引号)
样例输入
Sample Input
3
1 2
2
2
样例输出
Sample Output
impossible!
数据范围及提示
Data Size & Hint
对于100%的数据 N≤100000 元素均为正整数且小于等于10^8
分类标签 Tags 点此展开
#include<cstdio>
#include<iostream>
using namespace std;
int n,top=0,s=0,h=0;
int a[111111];
bool b=0;
void pop()
{
int v;
scanf("%d",&v);
a[h++]=v;
}
void push()
{
if(top<h)
top++;
else b=1;
}
int main()
{
int p;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&p);
if(p==1)
{
s++;
pop();
}
if(p==2)
{
s--;
push();
if(b)
{
printf("impossible!");
return 0;
}
}
}
if(s<=0)
{
printf("impossible!");
}
else printf("%d",a[top]);
return 0;
}
3187x
题目描述 Description
比起第一题,本题加了另外一个操作,访问队头元素(编号3,保证访问队头元素时或出队时队不为空),现在给出这N此操作,输出结果。
输入描述 Input Description
N
N次操作(1入队 2出队 3访问队头)
输出描述
Output Description
K行(K为输入中询问的个数)每次的结果
样例输入
Sample Input
6
1 7
3
2
1 9
1 7
3
样例输出
Sample Output
7
9
数据范围及提示
Data Size & Hint
对于50%的数据 N≤1000 入队元素≤200
对于100%的数据 N≤100000入队元素均为正整数且小于等于10^4
分类标签 Tags 点此展开
#include<cstdio> #include<iostream> using namespace std; int n,top=0,h=0; int a[111111]; void pop() { int v; scanf("%d",&v); a[h]=v;h++; if(h==1) { a[top]=v; } } void push() { top++; } int main() { int p; scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&p); if(p==1) { pop(); } if(p==2) { push(); } if(p==3) { printf("%d\n",a[top]); } } return 0; }