-
Notifications
You must be signed in to change notification settings - Fork 28
/
1063-uri.c
102 lines (94 loc) · 2.26 KB
/
1063-uri.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <stdio.h>
#include <stdlib.h>
struct elementos{
char valor;
struct elementos *prox;
};
typedef struct elementos Node;
struct pilha{
int contador;
struct elementos *topo;
};
typedef struct pilha Pilha;
Pilha* cria_pilha(){
Pilha* pi = (Pilha*)malloc(sizeof(Pilha));
pi->contador = 0;
pi->topo = NULL;
return pi;
}
void insere_pilha(Pilha* pi, char valor){
Node *no=(Node*)malloc(sizeof(Node));
no->valor = valor;
no->prox = pi->topo;
pi->topo = no;
pi->contador++;
}
void remove_pilha(Pilha* pi){
Node *no;
no = pi->topo;
pi->topo = no->prox;
free(no);
pi->contador--;
}
int main(){
Pilha *lado_B;
lado_B = cria_pilha();
int n=1;
while (n > 0) {
char lado_a[27],saida_desejada[27];
int i=0,k=0;
char c;
scanf("%d",&n);
for (i = 0; i < n; i++){
scanf(" %c", &c);
lado_a[i] = c;
}
lado_a[n] = '\0';
for (i = 0; i < n; i++){
scanf(" %c", &c);
saida_desejada[i] = c;
}
saida_desejada[n] = '\0';
i=0;
while(k != n){
if(i < n){
if(saida_desejada[k] == lado_a[i]){
insere_pilha(lado_B, lado_a[i]);
remove_pilha(lado_B);
printf("IR");
i++;
k++;
}
if((lado_B->topo!=NULL)&&(lado_B->contador!=0)){
if((saida_desejada[k]!=lado_B->topo->valor)&&(saida_desejada[k]!=lado_a[i])&&(i!=n)){
printf("I");
insere_pilha(lado_B, lado_a[i]);
i++;
}
}
else if(saida_desejada[k]!=lado_a[i]){
insere_pilha(lado_B, lado_a[i]);
i++;
printf("I");
}
}
if((lado_B->topo != NULL)&&(lado_B->contador !=0)){
if(saida_desejada[k]==lado_B->topo->valor){
printf("R");
remove_pilha(lado_B);
k++;
}
else if(i>=n){
printf(" Impossible");
while(lado_B->contador != 0){
remove_pilha(lado_B);
}
break;
}
}
}
printf("\n");
scanf("%d",&n);
}
return 0;
}