My problem is that I have uploud the file to the judge and it shows me a "Wrong Answer" error.
The code that I have programmed is here:
Code: Select all
import java.io.*;
import java.util.*;
class Main {
int mesa[][];
static String ReadLn(int maxLongitud){
byte linea[]=new byte[maxLongitud];
int longitud=0,caracter=-1;
try{
while(longitud<maxLongitud){
caracter=System.in.read();
if((caracter<0) || (caracter=='\n')){
break;
}
linea[longitud++]+=caracter;
}
}catch(IOException e){
return null;
}
return (new String(linea,0,longitud));
}
public static void main(String[] args) {
Main programa=new Main();
programa.lanzar();
}
void lanzar(){
String linea;
StringTokenizer idata;
int n, a, b;
posicion posA, posB;
String instruccion;
String tipoInstruccion;
linea=ReadLn(255);
idata=new StringTokenizer(linea);
n=Integer.parseInt(idata.nextToken());
mesa=new int[n][];
for(int i=0;i<n;i++){
mesa[i]=new int[1];
mesa[i][0]=i;
}
do{
linea=ReadLn(255);
idata=new StringTokenizer(linea);
instruccion=idata.nextToken();
if(!instruccion.equals("quit")){
a = Integer.parseInt(idata.nextToken());
tipoInstruccion=idata.nextToken();
b = Integer.parseInt(idata.nextToken());
if((a!=b)){
posA=buscar(a);
posB=buscar(b);
if(posA.getPila()!=posB.getPila()){
if(instruccion.equals("move")){
if(tipoInstruccion.equals("over")){
moveover(posA,posB);
}else if(tipoInstruccion.equals("onto")){
moveonto(posA,posB);
}
}else if(instruccion.equals("pile")){
if(tipoInstruccion.equals("over")){
pileover(posA,posB);
}else if(tipoInstruccion.equals("onto")){
pileonto(posA,posB);
}
}
}
}
}
}while(!instruccion.equals("quit"));
mostrar();
}
void mostrar(){
String linea;
for(int i=0;i<mesa.length;i++){
linea=i + ":";
for(int j=0;j<mesa[i].length;j++){
linea+=" " + mesa[i][j];
}
System.out.println(linea);
}
}
posicion buscar(int bloque){
int pila=0, altura=0;
boolean encontrado=false;
for(int i=0;i<mesa.length && !encontrado;i++){
for(int j=0;j<mesa[i].length && !encontrado;j++){
if(mesa[i][j]==bloque){
encontrado=true;
pila=i;
altura=j;
}
}
}
return new posicion(pila,altura);
}
void moveover(posicion posa,posicion posb){
int pilaauxB[],pilaauxA[];
int i;
pilaauxB=new int[mesa[posb.getPila()].length+1];
for(i=0;i<mesa[posb.getPila()].length;i++){
pilaauxB[i]=mesa[posb.getPila()][i];
}
pilaauxB[i]=mesa[posa.getPila()][posa.getAltura()];
mesa[posb.getPila()]=pilaauxB;
pilaauxA=new int[mesa[posa.getPila()].length-1];
for(i=0;i<posa.getAltura();i++){
pilaauxA[i]=mesa[posa.getPila()][i];
}
for(i=posa.getAltura()+1;i<mesa[posa.getPila()].length;i++){
pilaauxA[i-1]=mesa[posa.getPila()][i];
}
mesa[posa.getPila()]=pilaauxA;
}
void pileover(posicion posa,posicion posb){
int pilaauxA[], pilaauxB[];
int i;
pilaauxB=new int[mesa[posb.getPila()].length +
mesa[posa.getPila()].length - posa.getAltura()];
pilaauxA=new int[posa.getAltura()];
for(i=0;i<mesa[posb.getPila()].length;i++){
pilaauxB[i]=mesa[posb.getPila()][i];
}
for(i=0;i<posa.getAltura();i++){
pilaauxA[i]=mesa[posa.getPila()][i];
}
for(int j=i;j<mesa[posa.getPila()].length;j++){
pilaauxB[mesa[posb.getPila()].length + j - i] =
mesa[posa.getPila()][j];
}
mesa[posa.getPila()]=pilaauxA;
mesa[posb.getPila()]=pilaauxB;
}
void moveonto(posicion posa,posicion posb){
int pilaauxA[], pilaauxB[];
int contB, i;
pilaauxA=new int[mesa[posa.getPila()].length-1];
pilaauxB=new int[mesa[posb.getPila()].length+1];
for(contB=0;contB<=posb.getAltura();contB++){
pilaauxB[contB]=mesa[posb.getPila()][contB];
}
pilaauxB[contB]=mesa[posa.getPila()][posa.getAltura()];
for(i=contB+1;i<pilaauxB.length; i++){
pilaauxB[i]=mesa[posb.getPila()][i-1];
}
for(i=0;i<posa.getAltura();i++){
pilaauxA[i]=mesa[posa.getPila()][i];
}
for(i=posa.getAltura()+1;i<mesa[posa.getPila()].length;i++){
pilaauxA[i-1]=mesa[posa.getPila()][i];
}
mesa[posa.getPila()]=pilaauxA;
mesa[posb.getPila()]=pilaauxB;
}
void pileonto(posicion posa,posicion posb){
int pilaauxA[],pilaauxB[];
int contB,contA,i;
pilaauxB=new int[mesa[posb.getPila()].length +
mesa[posa.getPila()].length - posa.getAltura()];
pilaauxA=new int[posa.getAltura()];
for(contA=0;contA<posa.getAltura();contA++){
pilaauxA[contA]=mesa[posa.getPila()][contA];
}
for(contB=0;contB<=posb.getAltura();contB++){
pilaauxB[contB]=mesa[posb.getPila()][contB];
}
for(i=posa.getAltura();i<mesa[posa.getPila()].length;i++){
pilaauxB[contB++]=mesa[posa.getPila()][i];
}
for(i=contB;i<pilaauxB.length;i++){
pilaauxB[i]=mesa[posb.getPila()][posb.getAltura()+i-contB+1];
}
mesa[posa.getPila()]=pilaauxA;
mesa[posb.getPila()]=pilaauxB;
}
class posicion{
int pila;
int altura;
posicion(int pila,int altura){
this.pila=pila;
this.altura=altura;
}
int getPila(){
return pila;
}
int getAltura(){
return altura;
}
}
}