2011年9月9日 星期五

ACM 11995 I Can Guess the Data Structure!

新生練習題的題目,看到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;
}

沒有留言:

張貼留言