Advertisement
Guest User

Untitled

a guest
Apr 21st, 2020
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.43 KB | None | 0 0
  1. package demo;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.nio.charset.StandardCharsets;
  7. import java.util.Arrays;
  8. import java.util.TreeSet;
  9. import java.util.stream.Collectors;
  10.  
  11. public class Sticks {
  12.     private static void generate(TreeSet<String> set, Pair[] sticks, int index) {
  13.         if (index == sticks.length) {
  14.             set.add(Arrays.stream(sticks)
  15.                     .map(Pair::toString)
  16.                     .collect(Collectors.joining(" # ")));
  17.         } else {
  18.             for (int i = index; i < sticks.length; i++) {
  19.                 swapElement(sticks, index, i);
  20.                 generate(set, sticks, index + 1);
  21.  
  22.                 sticks[index].swapPairValue();
  23.                 generate(set, sticks, index + 1);
  24.  
  25.                 sticks[index].swapPairValue();
  26.                 swapElement(sticks, index, i);
  27.             }
  28.         }
  29.     }
  30.  
  31.     private static void swapElement(Pair[] sticks, int index1, int index2) {
  32.         Pair temp = sticks[index1];
  33.         sticks[index1] = sticks[index2];
  34.         sticks[index2] = temp;
  35.     }
  36.  
  37.     public static void main(String[] args) throws IOException {
  38.         final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
  39.         TreeSet<String> set = new TreeSet<>();
  40.         int steps = Integer.parseInt(reader.readLine());
  41.  
  42.         Pair[] sticks = reader.lines()
  43.                 .limit(steps).map(line -> {
  44.                     String[] tokens = line.split("\\s+");
  45.                     return new Pair(Integer.parseInt(tokens[0]), Integer.parseInt(tokens[1]));
  46.                 })
  47.                 .toArray(Pair[]::new);
  48.  
  49.         generate(set, sticks, 0);
  50.         final StringBuilder sb = new StringBuilder().append(set.size());
  51.  
  52.         set.forEach(stick -> sb.append(System.lineSeparator()).append(stick));
  53.         System.out.println(sb.toString());
  54.     }
  55.  
  56.     public static class Pair {
  57.         private int first;
  58.         private int second;
  59.  
  60.         Pair(int first, int second) {
  61.             this.first = first;
  62.             this.second = second;
  63.         }
  64.  
  65.         private void swapPairValue() {
  66.             int temp = this.first;
  67.             this.first = this.second;
  68.             this.second = temp;
  69.         }
  70.  
  71.         @Override
  72.         public String toString() {
  73.             return "|" + this.first + "-" + this.second + "|";
  74.         }
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement