I Can Guess the Data Structure!
There is a bag-like data structure, supporting two operations:
1 x
Throw an element x into the bag.
2
Take out an element from the bag.
Given a sequence of operations with return values, you're going to guess the data structure. It is a stack (Last-In, First-Out), a queue (First-In, First-Out), a priority-queue (Always take out larger elements first) or something else that you can hardly imagine!
Input
There are several test cases. Each test case begins with a line containing a single integer n (1<=n<=1000). Each of the next n lines is either a type-1 command, or an integer 2 followed by an integer x. That means after executing a type-2 command, we get an element xwithout error. The value of x is always a positive integer not larger than 100. The input is terminated by end-of-file (EOF). The size of input file does not exceed 1MB.
Output
For each test case, output one of the following:
stack
It's definitely a stack.
queue
It's definitely a queue.
priority queue
It's definitely a priority queue.
impossible
It can't be a stack, a queue or a priority queue.
not sure
It can be more than one of the three data structures mentioned above.
Sample Input
6 1 1 1 2 1 3 2 1 2 2 2 3 6 1 1 1 2 1 3 2 3 2 2 2 1 2 1 1 2 2 4 1 2 1 1 2 1 2 2 7 1 2 1 5 1 1 1 3 2 5 1 4 2 4
Output for the Sample Input
queue not sure impossible stack priority queue题意:1为放入,2为取出,判断输入的数据判断该数据结构是栈,队列,还是优先队列。。
思路:直接模拟判断。
#include <stdio.h>
#include <string.h>
int n;
int sb[1005][2];
int fuck[1005];
int fuckk;
int sta()
{
memset(fuck, 0, sizeof(fuck));
fuckk = 1;
for (int i = 0; i < n; i ++)
{
if (sb[i][0] == 1)
{
fuck[fuckk ++] = sb[i][1];
}
else if (sb[i][0] == 2)
{
fuckk --;
if (fuck[fuckk] != sb[i][1])
return 0;
else
fuck[fuckk] = 0;
}
}
return 1;
}
int que()
{
memset(fuck, 0, sizeof(fuck));
fuckk = 1;
for (int i = 0; i < n ; i ++)
{
if (sb[i][0] == 1)
fuck[fuckk ++] = sb[i][1];
else if (sb[i][0] == 2)
{
if (fuck[1] != sb[i][1])
return 0;
else
{
for (int i = 1; i < fuckk; i ++)
{
fuck[i] = fuck[i + 1];
}
fuckk --;
}
}
}
return 1;
}
int findmax()
{
int maxx = 0;
int maxxv = 0;
for (int i = 1; i < fuckk; i ++)
{
if (maxx < fuck[i])
{
maxx = fuck[i];
maxxv = i;
}
}
return maxxv;
}
int prq()
{
memset(fuck, 0, sizeof(fuck));
fuckk = 1;
for (int i = 0; i < n ; i ++)
{
if (sb[i][0] == 1)
fuck[fuckk ++] = sb[i][1];
else if (sb[i][0] == 2)
{
int sbb = findmax();
if (fuck[sbb] != sb[i][1])
return 0;
else
{
for (int i = sbb; i < fuckk; i ++)
{
fuck[i] = fuck[i + 1];
}
fuckk --;
}
}
}
return 1;
}
int main()
{
while (scanf("%d", &n) != EOF)
{
memset(fuck, 0, sizeof(fuck));
memset(sb, 0, sizeof(sb));
for (int i = 0; i < n; i ++)
{
scanf("%d%d", &sb[i][0], &sb[i][1]);
}
if (sta() && !que() && !prq())
printf("stack\n");
else if (!sta() && que() && !prq())
printf("queue\n");
else if (!sta() && !que() && prq())
printf("priority queue\n");
else if (!sta() && !que() && !prq())
printf("impossible\n");
else
printf("not sure\n");
}
return 0;
}