Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pal;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- public class Main {
- static public int countBelts; // belts are labeled 0:countBelts-1
- static public int countSegment; //labeled by chars a-z, Segment in 1 disk
- static public int countDisk; // count disks in one belt
- static public String[] belts;
- static public String[] beltsGroups;
- static public ArrayList<String> beltsUnique;
- static public ArrayList<String> disks;
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String[] in = br.readLine().split(" ");
- countBelts = Integer.parseInt(in[0]);
- countSegment = Integer.parseInt(in[1]);
- countDisk = Integer.parseInt(in[2]);
- belts = new String[countBelts];
- beltsUnique = new ArrayList<>();
- disks = new ArrayList<>();
- beltsGroups = new String[countBelts];
- String belt, beltUniq;
- int countGroups = 0;
- for (int i = 0; i < countBelts; i++) {
- in = br.readLine().split(" ");
- belt = createBeltofDiskIndex(in);
- belts[i] = belt;
- }
- for (int i = 0; i < countBelts; i++) {
- }
- }
- public static String createBeltofDiskIndex(String[] strArr) {
- Integer indexOfSegment;
- String disk;
- String belt = "";
- for (int j = 1; j <= countDisk; j++) {
- disk = strArr[j];
- // System.out.println("disk " +disk);
- indexOfSegment = indexOfexistingDisk(disk);
- if (indexOfSegment >= 0) { //vzor jiz existuje
- belt += indexOfSegment.toString() + " ";
- } else //vzor neexistuje, pridame ho do listu a vratime si jeho index
- {
- disks.add(disk+disk);
- indexOfSegment = disks.indexOf(disk+disk);
- belt += indexOfSegment.toString() + " ";
- }
- }
- return belt;
- }
- public static String createBeltGroupsofBeltIndex(String[] strArr) {
- Integer indexOfSegment;
- String disk;
- String belt = "";
- for (int j = 1; j <= countDisk; j++) {
- disk = strArr[j];
- // System.out.println("disk " +disk);
- indexOfSegment = indexOfexistingDisk(disk);
- if (indexOfSegment >= 0) { //vzor jiz existuje
- belt += indexOfSegment.toString() + " ";
- } else //vzor neexistuje, pridame ho do listu a vratime si jeho index
- {
- disks.add(disk+disk);
- indexOfSegment = disks.indexOf(disk+disk);
- belt += indexOfSegment.toString() + " ";
- }
- }
- return belt;
- }
- public static int indexOfexistingDisk(String disk) {
- if (disks.isEmpty()) {
- return -1;
- } else {
- for (String s : disks) {
- if (checkRotation(s, disk) || checkRotation(s, flip(disk))) {
- return disks.indexOf(s);
- }
- }
- }
- return -1;
- }
- public static int indexOfexistingBelt(String belt) {
- if (beltsUnique.isEmpty()) {
- return -1;
- } else {
- for (String s : beltsUnique) {
- if (checkRotation(s, belt) || checkRotation(s, flip(belt))) {
- return beltsUnique.indexOf(s);
- }
- }
- }
- return -1;
- }
- public static boolean checkRotation(String s1, String s2) {
- //vrati true, kdyz string1 obsahuje string 2
- if ((s1.length() == 2*s2.length()) && (s1.contains(s2))) {
- return true;
- } else {
- return false;
- }
- }
- //zrcadleni
- public static String flip(String s1) {
- StringBuilder str = new StringBuilder(s1);
- return str.reverse().toString();
- }
- // public static int[][] sortArray(int column) {
- // int[][] sortedArray = new int[M][3];
- // int min = edges[0][column];
- // int max = edges[0][column];
- // //find min and max values for histogram from current column
- // for (int i = 1; i < M; i++) {
- // if (edges[i][column] < min) {
- // min = edges[i][column];
- // } else if (edges[i][column] > max) {
- // max = edges[i][column];
- // }
- // }
- // //histogram length from min to max
- // int[] hist = new int[max - min + 1];
- // for (int i = 0; i < M; i++) {
- // hist[edges[i][column] - min]++;
- // }
- // //pole vyskytu
- // hist[0]--;
- // for (int i = 1; i < hist.length; i++) {
- // hist[i] = hist[i] + hist[i - 1];
- // }
- // //min to max
- // for (int i = M - 1; i >= 0; i--) {
- // int histIndex = edges[i][column] - min;
- // int index = hist[histIndex];
- // sortedArray[index][column] = edges[i][column];
- // sortedArray[index][1] = edges[i][1];
- // sortedArray[index][0] = edges[i][0];
- // hist[histIndex]--;
- // }
- // return sortedArray;
- // }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement