Advertisement
DimasDark

L1Q3

Jun 4th, 2013
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.83 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. //FILA DUPLAMENTE ENCADEADA NO ESTILO LISTA ~DIMAS~DARK~
  4.  
  5. typedef struct no
  6. {
  7.     int valor;
  8.     struct no *proximo;
  9. } No;
  10.  
  11. typedef struct lista
  12. {
  13.     No* inicio;
  14.     No* fim;
  15.  
  16. } Impressora;
  17.  
  18.  
  19.  
  20. Impressora* inicializa()
  21. {
  22.     Impressora* l = new Impressora();
  23.     l ->inicio = l->fim = NULL;
  24.     return l;
  25. }
  26.  
  27. int isVazia(Impressora* l)
  28. {
  29.     return (l->inicio == NULL);
  30. }
  31.  
  32. //Insere no fim
  33. No* insereFim(No* n, int v)
  34. {
  35.     No* novo = new No();
  36.     novo ->valor = v;
  37.     novo ->proximo = NULL;
  38.     if (n != NULL)
  39.         n->proximo = novo;
  40.     return novo;
  41. }
  42.  
  43. //Retira do inicio
  44. No* retiraIni(No* n)
  45. {
  46.     No* p = n->proximo;
  47.     delete(n);
  48.     return p;
  49.  
  50. }
  51.  
  52. //Função para inserir
  53. void inserirDocumento(Impressora* l, int v)
  54. {
  55.     l->fim = insereFim(l->fim, v);
  56.     if (l->inicio == NULL)
  57.         l->inicio = l->fim;
  58. }
  59.  
  60. int imprima(Impressora* l)   //Remove do inicio e retorna o valor que removeu
  61. {
  62.     int v;
  63.     v = l->inicio->valor;
  64.     l->inicio = retiraIni(l->inicio);
  65.     if (l->inicio == NULL)
  66.         l->fim = NULL;
  67.     return v;
  68. }
  69.  
  70.  
  71.  
  72. void valorDocumentos(Impressora* l)
  73. {
  74.     No* p;
  75.     for (p = l->inicio; p != NULL; p = p->proximo)
  76.     {
  77.         if (p->proximo == NULL)
  78.             printf("%d", p->valor);
  79.         else
  80.             printf("%d ", p->valor);
  81.     }
  82.  
  83. }
  84.  
  85. void exclui(Impressora* l)
  86. {
  87.     No* p = l->inicio;
  88.     while (p != NULL)
  89.     {
  90.         No* aux = p->proximo; /* guarda referência para o próximo elemento
  91. */
  92.         delete(p); /* libera a memória apontada por p */
  93.         p = aux; /* faz p apontar para o próximo */
  94.     }
  95. }
  96.  
  97.  
  98.  
  99.  
  100.  
  101. int main()
  102. {
  103.  
  104. //   freopen("L1Q3.in", "r", stdin);
  105.     // freopen("L1Q3.out", "w", stdout);
  106.     int casos;
  107.     int i;
  108.     int T;
  109.  
  110.     int cmd_linha;
  111.     int cmd;
  112.     char prioridade;
  113.     int numComandos;
  114.     char linha[30];
  115.  
  116.  
  117.  
  118.     freopen("L1Q3.in", "r", stdin);
  119.     freopen("L1Q3.out", "w", stdout);
  120.  
  121.  
  122.     scanf("%d", &casos); //SCANEIA O NUMERO DE CASOS
  123.     int k = 1;
  124.  
  125.     while (casos > 0) //PRA PODER IMPRIMIR O CASO A PARTIR DE 1
  126.     {
  127.         Impressora* prioridadeA;
  128.         Impressora* prioridadeB;
  129.         Impressora* prioridadeC;
  130.  
  131.         prioridadeA = inicializa();
  132.         prioridadeB = inicializa();
  133.         prioridadeC = inicializa();
  134.  
  135.         scanf("%d", &numComandos); //NÚMERO DE COMANDOS, ELE LÊ CERTO NUMERO DE COMANDOS A CADA CASO
  136.         getchar();
  137.  
  138.         printf("Caso %d:\n", k); //IMPRIME O NÚMERO DO CASO
  139.         while (numComandos > 0) //FAZ O NÚMERO DE COMANDOS
  140.         {
  141.  
  142.             //SE A LINHA FOR 1 T 'C' ADICIONA OS DOCUMENTOS 1 ATÉ T NA FILA 'C' = A, B OU C
  143.  
  144.             fgets(linha, 30, stdin);
  145.  
  146.             cmd_linha = sscanf(linha, "%d %d %c", &cmd, &T, &prioridade);
  147.  
  148.             if (cmd_linha == 3)
  149.             {
  150.  
  151.                 if (prioridade == 'A')
  152.                 {
  153.                     for (i = 1; i < T+1; i++)
  154.                     {
  155.                         inserirDocumento(prioridadeA, i);
  156.  
  157.                     }
  158.                 }
  159.                 else if (prioridade == 'B')
  160.                 {
  161.                     for (i = 1; i < T+1; i++)
  162.                     {
  163.                         inserirDocumento(prioridadeB, i);
  164.  
  165.                     }
  166.  
  167.                 }
  168.                 else
  169.                 {
  170.                     for (i = 1; i < T+1; i++)
  171.                     {
  172.                         inserirDocumento(prioridadeC, i);
  173.  
  174.                     }
  175.  
  176.                 }
  177.  
  178.             }
  179.             else    //SE FOR 2 IMPRIME OS DOCUMENTOS QUE ESTÃO EM A (ELES SAEM DA FILA)
  180.             {
  181.                 if (isVazia(prioridadeA) != 1) //SE 'A' NAO FOR VAZIA IMPRIME 'A' E PASSA OS ELEMENTOS DE B PARA 'A' E OS DE 'C' PARA 'B'
  182.                 {
  183.                     while (isVazia(prioridadeA) != 1)
  184.                     {
  185.                         if (prioridadeA->inicio->proximo != NULL)
  186.                             printf("%d ", imprima(prioridadeA));
  187.                         else
  188.                             printf("%d\n", imprima(prioridadeA));
  189.  
  190.                     }
  191.  
  192.                     while (isVazia(prioridadeB) != 1)
  193.                     {
  194.                         inserirDocumento(prioridadeA, imprima(prioridadeB));
  195.                     }
  196.  
  197.                     while (isVazia(prioridadeC) != 1)
  198.                     {
  199.                         inserirDocumento(prioridadeB, imprima(prioridadeC));
  200.                     }
  201.  
  202.                 }
  203.                 else //SE A FOR VAZIA, IMPRIME OS DE B, E JOGA OS DOCUMENTOS DE C PARA B
  204.                 {
  205.                     if (isVazia(prioridadeB) != 1) //B NAO É VAZIO
  206.                     {
  207.                         while (isVazia(prioridadeB) != 1)
  208.                         {
  209.                             if (prioridadeB->inicio->proximo != NULL)
  210.                                 printf("%d ", imprima(prioridadeB));
  211.                             else
  212.                                 printf("%d\n", imprima(prioridadeB));
  213.                         }
  214.  
  215.                         while (isVazia(prioridadeC) != 1)
  216.                         {
  217.                             inserirDocumento(prioridadeB, imprima(prioridadeC));
  218.                         }
  219.  
  220.                     }
  221.                     else //CASO B FOR VAZIA, IMPRIMA C
  222.                     {
  223.                         while (isVazia(prioridadeC) != 1)
  224.                         {
  225.                             if (prioridadeC->inicio->proximo != NULL)
  226.                                 printf("%d ", imprima(prioridadeC));
  227.                             else
  228.                                 printf("%d\n", imprima(prioridadeC));
  229.                         }
  230.                     }
  231.  
  232.                 }
  233.  
  234.  
  235.             }
  236.  
  237.             numComandos--;
  238.  
  239.         }
  240.         casos--;
  241.         k++;
  242.  
  243.  
  244.     }
  245.  
  246.  
  247.  
  248.  
  249.  
  250.     return 0;
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement