新生練習題的題目,看到The jackpot以後才發現原來題目從UVa來的,於是馬上把之前解The jackpot的Code丟上去XD
#include <stdio.h>
short x[1000], cmd[1000], seq[1001];
int main(void)
{
int i, j, k, n, stack, queue, pri, head, max, tmp;
while (scanf("%d", &n) == 1)
{
for (i = 0; i < n; i++)
scanf("%hd%hd", &cmd[i], &x[i]);
stack = queue = pri = 1;
/* Stack */
for (i = 0; i < 1001; i++)
seq[i] = -1;
for (i = j = 0; i < n; i++)
{
if (cmd[i] == 1)
seq[j++] = x[i];
else if (cmd[i] == 2)
if (x[i] == seq[j-1])
j--;
else
{
stack = 0;
break;
}
}
/* Queue */
for (i = 0; i < 1001; i++)
seq[i] = -1;
for (i = j = head = 0; i < n; i++)
{
if (cmd[i] == 1)
seq[j++] = x[i];
else if (cmd[i] == 2)
if (x[i] == seq[head])
head++;
else
{
queue = 0;
break;
}
}
/* Priority Queue */
for (i = 0; i < 1001; i++)
seq[i] = -1;
for (i = j = head = 0; i < n; i++)
{
if (cmd[i] == 1)
seq[j++] = x[i];
else if (cmd[i] == 2)
{
max = -1;
for (k = 0; k < j; k++)
if (seq[k] > max)
{
max = seq[k];
tmp = k;
}
if (x[i] == max)
seq[tmp] = -1;
else
{
pri = 0;
break;
}
}
}
if (!stack && !queue && !pri)
printf("impossible\n");
else if ((stack && queue) || (stack && pri) || (queue && pri))
printf("not sure\n");
else if (stack)
printf("stack\n");
else if (queue)
printf("queue\n");
else
printf("priority queue\n");
}
return 0;
}
沒有留言:
張貼留言