diff --git a/ra-preguicosa/problem.json b/ra-preguicosa/problem.json index 4c8cde4..26dee3a 100644 --- a/ra-preguicosa/problem.json +++ b/ra-preguicosa/problem.json @@ -43,7 +43,7 @@ }, "solutions": { "main-ac": "ac.cpp", - "alternative-ac": ["ac_constant_time_heap.cpp"], + "alternative-ac": ["ac_constant_time_heap.c"], "wrong-answer": [], "time-limit": [], "time-limit-or-ac": [], diff --git a/ra-preguicosa/src/ac_constant_time_heap.cpp b/ra-preguicosa/src/ac_constant_time_heap.cpp deleted file mode 100644 index 47616c7..0000000 --- a/ra-preguicosa/src/ac_constant_time_heap.cpp +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#define INF 0x3f3f3f3f -#define MAX 150000 -typedef struct node_t{ - int i; - int j; - int c; -}node_t; - -/*pantano*/ -char mesh[1001][1001]; -int custo[1002][1002]; -char calculado[1002][1002]; -int inserido[1002][1002]; -node_t filas[8][MAX]; -int contadoresInicio[8]; -int contadoresFim[8]; -int C,R; -int Cf,Rf,Ct,Rt; -int C1,R1,C2,R2; -int W; -int currentFila; - -/*Escova bit*/ -inline int get_int(){ - int ch, i; - while (((ch = getchar()) == ' ') || (ch == '\n')); - for (i = 0; ch >= '0' && ch <= '9'; ch = getchar() ) - i = 10 * i + (ch - '0'); - return i; -} - - -void insere(node_t no,int custo){ - int balde = custo%8; - inserido[no.i][no.j] = balde; - filas[balde][contadoresFim[balde]++] = no; -} - -int retira(node_t* aux){ - int start = currentFila; - while(contadoresInicio[currentFila]==contadoresFim[currentFila]){ - currentFila++; - if(currentFila==8) currentFila = 0; - if(currentFila==start) return(0); - } - *aux = filas[currentFila][contadoresInicio[currentFila]++]; - return(1); -} - -/*Funcao q testa os limites do tabuleiro e outras coisas - *do Dijkstra - */ -int testa(node_t current,int i,int j,int c){ - - int custoAtual = custo[current.i][current.j]; - node_t temp; - if(!(i<=R && i>=1 && j<=C && j>=1)){ - return(1); - } - - if(calculado[i][j]){ - return(1); - } - if(mesh[i][j]==0){ - /*relaxamento*/ - if(custoAtual+c < custo[i][j]){ - custo[i][j] = custoAtual+c; - /*insere normal*/ - temp.i = i; - temp.j = j; - temp.c = custo[i][j]; - insere(temp,(custo[i][j])); - } - return(1); - } - return(0); -} - - -int getFila(){ - int i; - for(i=0;i<8;i++){ - if(contadoresInicio[i] custo[aux.i][aux.j]) continue; - /*pega a frente de onda*/ - //~ calculado[aux.i][aux.j] = 1; - - /*Só faz sentido calcular o pulo mais distante - *de o pulo da frente tiver alagado - */ - - /*Superior*/ - if(!testa(aux,aux.i+1,aux.j,2)) - testa(aux,aux.i+2,aux.j,5); - - /*Diagonais*/ - if(!testa(aux,aux.i+1,aux.j-1,3)){ - testa(aux,aux.i+2,aux.j-2,7); - testa(aux,aux.i+2,aux.j-1,6); - testa(aux,aux.i+1,aux.j-2,6); - } - - /*Diagonais*/ - if(!testa(aux,aux.i+1,aux.j+1,3)){ - testa(aux,aux.i+2,aux.j+2,7); - testa(aux,aux.i+2,aux.j+1,6); - testa(aux,aux.i+1,aux.j+2,6); - } - - /*parte lateral*/ - - if(!testa(aux,aux.i,aux.j-1,2)) - testa(aux,aux.i,aux.j-2,5); - if(!testa(aux,aux.i,aux.j+1,2)) - testa(aux,aux.i,aux.j+2,5); - - /*parte de baixo*/ - if(!testa(aux,aux.i-1,aux.j,2)) - testa(aux,aux.i-2,aux.j,5); - /*Diagonais*/ - if(!testa(aux,aux.i-1,aux.j-1,3)){ - testa(aux,aux.i-2,aux.j-2,7); - testa(aux,aux.i-1,aux.j-2,6); - testa(aux,aux.i-2,aux.j-1,6); - } - - /*Diagonais*/ - if(!testa(aux,aux.i-1,aux.j+1,3)){ - testa(aux,aux.i-2,aux.j+2,7); - testa(aux,aux.i-2,aux.j+1,6); - testa(aux,aux.i-1,aux.j+2,6); - } - - } - if(custo[Rt][Ct]==INF){ - printf("impossible\n"); - } - else{ - printf("%d\n",custo[Rt][Ct]); - } - } - return(0); -} -