您的位置:首页 > 大数据 > 人工智能

hdoj 1702 ACboy needs your help again!【数组模拟+STL实现】

2015-06-10 23:15 459 查看

ACboy needs your help again!

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4241 Accepted Submission(s):
2164


[align=left]Problem Description[/align]
ACboy was kidnapped!!
he miss his mother very much
and is very scare now.You can't image how dark the room he was put into is, so
poor :(.
As a smart ACMer, you want to get ACboy out of the monster's
labyrinth.But when you arrive at the gate of the maze, the monste say :" I have
heard that you are very clever, but if can't solve my problems, you will die
with ACboy."
The problems of the monster is shown on the wall:
Each
problem's first line is a integer N(the number of commands), and a word "FIFO"
or "FILO".(you are very happy because you know "FIFO" stands for "First In First
Out", and "FILO" means "First In Last Out").
and the following N lines, each
line is "IN M" or "OUT", (M represent a integer).
and the answer of a problem
is a passowrd of a door, so if you want to rescue ACboy, answer the problem
carefully!

[align=left]Input[/align]
The input contains multiple test cases.
The first
line has one integer,represent the number oftest cases.
And the input of each
subproblem are described above.

[align=left]Output[/align]
For each command "OUT", you should output a integer
depend on the word is "FIFO" or "FILO", or a word "None" if you don't have any
integer.

[align=left]Sample Input[/align]

4

4 FIFO
IN 1

IN 2

OUT
OUT

4 FILO

IN 1
IN 2

OUT

OUT

5 FIFO
IN 1

IN 2
OUT
OUT

OUT

5 FILO

IN 1

IN 2

OUT

IN 3

OUT

[align=left]Sample Output[/align]

1
2
2
1
1
2
None
2
3

#include<stdio.h>
#include<string.h>
int main()
{
int n,m,j,i,sum,t,k,top;
char a[5]={"FIFO"};
char b[5]={"FILO"};
char d[5]={"IN"};
char e[5]={"OUT"};
char s[5];
char c[5];
int zhan[1100];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%s",s);
top=0;k=0;
for(i=0;i<n;i++)
{
scanf("%s",c);
if(strcmp(c,d)==0)  //如果输入的字符串为IN
{
scanf("%d",&m);  //则输入其后的数字并存入栈中
zhan[top++]=m;
}
else if(strcmp(c,e)==0)  //如果输入字符串为OUT
{
if(strcmp(s,b)==0)   //则判断字符串s是 FIFO还是FILO即是先进先出还是先进后出
{                      //此处为先进后出
if(top>0)       //如果栈不为空
{
printf("%d\n",zhan[top-1]);//则输出栈尾元素
top--;  //并删除此元素
}
else if(top<=0)
printf("None\n");//如果栈为空则输出None
}
else if(strcmp(s,a)==0)
{
if(k<top)  //如果k<top即栈不为空
{
printf("%d\n",zhan[k++]);//输出栈首元素并删除
}
else if(k>=top)  //如果栈为空
printf("None\n");//则输出None
}
}
}
}
return 0;
}


  STL:

#include<stdio.h>
#include<string.h>
#include<stack>
#include<queue>
#define MAX 1100
using namespace std;
char s1[MAX];
char str1[5]={"IN"};
char str4[5]={"FILO"};
int main()
{
int n,m,j,i,t,k,l;
int a,b;
char str[MAX];
stack<int>s;
queue<int>q;
scanf("%d",&t);
getchar();
while(t--)
{
scanf("%d%s",&n,str);
a=0;
if(strcmp(str,str4)==0)
{
while(n--)
{
scanf("%s",s1);
//scanf("%s %d",s1,&m);
if(strcmp(s1,str1)==0)
{
scanf("%d",&m);
s.push(m);
}
else
{
if(s.empty())
{
printf("None\n");
continue;
}
a=s.top();
printf("%d\n",a);
s.pop();
}
}
while(!s.empty())
{
s.pop();
}
}
else
{
while(n--)
{
scanf("%s",s1);
//scanf("%s %d",s1,&m);
if(strcmp(s1,str1)==0)
{
scanf("%d",&m);
q.push(m);
}
else
{
if(q.empty())
{
printf("None\n");
continue;
}
a=q.front();
printf("%d\n",a);
q.pop();
}
}
while(!q.empty())
q.pop();
}
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: