blob: a5b8b9a199de3cf3a84d4dccfc29a79a560bb0eb (
plain) (
tree)
|
|
import java.util.*;
public class DN01_63230317 {
public static int vrstica (int tipka) {
return (int) Math.sqrt(tipka);
}
public static int stolpec (int tipka) {
return tipka-vrstica(tipka)*vrstica(tipka)-vrstica(tipka);
}
public static int obroč (int tipka) {
return (int) Math.ceil(Math.floor(Math.sqrt(tipka))/2);
}
public static int prva (int obr) {
return (int) Math.pow(obr*2-1, 2);
}
public static int indeks (int tipka) {
if (tipka == 0)
return 0;
return tipka - prva(obroč(tipka));
}
public static int velikost (int obr) {
return prva(obr+1) - prva(obr);
}
public static int[] koordinate (int tipka) {
int koord[] = {
-obroč(tipka),
obroč(tipka)
};
if (indeks(tipka) < velikost(obroč(tipka))/4) {
koord[0] += indeks(tipka);
} else if (indeks(tipka) < velikost(obroč(tipka))/2) {
koord[0] += velikost(obroč(tipka))/4;
koord[1] -= indeks(tipka)-velikost(obroč(tipka))/4;
} else if (indeks(tipka) < 3*velikost(obroč(tipka))/4) {
koord[0] += 3*velikost(obroč(tipka))/4-indeks(tipka);
koord[1] -= velikost(obroč(tipka))/4;
} else
koord[1] -= velikost(obroč(tipka))-indeks(tipka);
if (System.getenv("DN02_DEBUG") != null) {
System.err.println("Tipka " + tipka + " je na koordinatah " + koord[0] + ", " + koord[1] + " ... obroč=" + obroč(tipka) + ", indeks=" + indeks(tipka) + ", velikost=" + velikost(obroč(tipka)));
}
return koord;
}
public static int razdalja (int d, int oblika, int začetek, int konec) {
switch (oblika) {
case 1: // ravnovrstnica
return Math.abs(konec-začetek);
case 2: // kvadratnica
return Math.abs(konec%d-začetek%d)+Math.abs(konec/d-začetek/d);
case 3: // piramidnica
return Math.abs(vrstica(konec)-vrstica(začetek))+Math.abs(stolpec(konec)-stolpec(začetek));
case 4: // spiralnica
return Math.abs(koordinate(konec)[0]-koordinate(začetek)[0])+Math.abs(koordinate(konec)[1]-koordinate(začetek)[1]);
}
throw new Error("napačna tipkovnica");
}
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int oblika = sc.nextInt();
int d = sc.nextInt();
int dolžina = sc.nextInt();
int pot = 0;
int stara = 0;
for (int i = 0; i < dolžina; i++) {
int tipka = sc.nextInt();
if (i > 0)
pot += razdalja(d, oblika, tipka, stara);
stara = tipka;
}
System.out.println(pot);
}
}
|