Guest User

Untitled

a guest
Sep 23rd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.69 KB | None | 0 0
  1. import java.math.BigInteger;
  2. import java.util.Arrays;
  3. import java.util.Scanner;
  4. import java.util.TreeSet;
  5.  
  6. public class UVa10733 {
  7.     public static int find(int i, int[] p) {
  8.         if (p[i] == i)
  9.             return i;
  10.         return p[i] = find(p[i], p);
  11.     }
  12.  
  13.     public static void union(int a, int b, int[] p) {
  14.         int p1 = find(a, p);
  15.         int p2 = find(b, p);
  16.         p[p1] = p2;
  17.     }
  18.  
  19.     public static void main(String[] args) {
  20.         int[] a = { 3, 5 };
  21.         int[] b = { 3, 5 };
  22.         TreeSet<Cube> S = new TreeSet<Cube>();
  23.         Cube c = new Cube();
  24.         for (int i = -3; i <= 3; i++)
  25.             for (int j = -3; j <= 3; j++)
  26.                 for (int k = 0; k <= 1; k++)
  27.                     for (int l = 0; l <= 1; l++)
  28.                         for (int m = 0; m <= 1; m++)
  29.                             for (int n = 0; n <= 1; n++) {
  30.                                 Cube x = c.rotateH(i).rotateV(j);
  31.                                 if (k == 1)
  32.                                     x = x.X();
  33.                                 if (l == 1)
  34.                                     x = x.W();
  35.                                 if (m == 1)
  36.                                     x = x.Z();
  37.                                 if (n == 1)
  38.                                     x = x.Y();
  39.                                 S.add(x);
  40.                             }
  41.         int[] pow = new int[7];
  42.         for (Cube cc : S) {
  43.             int[] p = { 0, 1, 2, 3, 4, 5 };
  44.             for (int i = 0; i < cc.rep.length; i++)
  45.                 union(i, cc.rep[i], p);
  46.  
  47.             int cnt = 0;
  48.             for (int i = 0; i < p.length; i++) {
  49.                 if (find(i, p) == i)
  50.                     cnt++;
  51.             }
  52.             pow[cnt]++;
  53.         }
  54.         BigInteger div = new BigInteger("24");
  55.         BigInteger[] res = new BigInteger[1001];
  56.         for (int i = 1; i < res.length; i++) {
  57.             res[i] = new BigInteger("0");
  58.             for (int j = 0; j <= 6; j++) {
  59.                 res[i] = res[i].add((new BigInteger(i + "").pow(j)
  60.                         .multiply(new BigInteger(pow[j] + ""))));
  61.             }
  62.             res[i] = res[i].divide(div);
  63.         }
  64.         Scanner in = new Scanner(System.in);
  65.         while (in.hasNext()) {
  66.             int n = in.nextInt();
  67.             if (n == 0)
  68.                 break;
  69.             System.out.println(res[n]);
  70.         }
  71.     }
  72. }
  73.  
  74. class Cube implements Comparable<Cube> {
  75.     int[] rep;
  76.  
  77.     public Cube(int[] rep) {
  78.         this.rep = rep;
  79.     }
  80.  
  81.     public Cube() {
  82.         rep = new int[] { 0, 1, 2, 3, 4, 5 };
  83.     }
  84.  
  85.     public Cube rotateV(int n) {
  86.         if (n == 0)
  87.             return new Cube(rep);
  88.         else if (n > 0)
  89.             return rotate90_V().rotateV(n - 1);
  90.         else
  91.             return rotateN90_V().rotateV(n + 1);
  92.     }
  93.  
  94.     public Cube rotateH(int n) {
  95.         if (n == 0)
  96.             return new Cube(rep);
  97.         else if (n > 0)
  98.             return rotate90_H().rotateV(n - 1);
  99.         else
  100.             return rotateN90_H().rotateV(n + 1);
  101.     }
  102.  
  103.     public Cube rotate90_V() {
  104.         int[] rep2 = new int[] { rep[3], rep[0], rep[1], rep[2], rep[4], rep[5] };
  105.         return new Cube(rep2);
  106.     }
  107.  
  108.     public Cube rotate90_H() {
  109.         int[] rep2 = new int[] { rep[5], rep[1], rep[4], rep[3], rep[0], rep[2] };
  110.         return new Cube(rep2);
  111.     }
  112.  
  113.     public Cube rotateN90_V() {
  114.         int[] rep2 = new int[] { rep[1], rep[2], rep[3], rep[0], rep[4], rep[5] };
  115.         return new Cube(rep2);
  116.     }
  117.  
  118.     public Cube rotateN90_H() {
  119.         int[] rep2 = new int[] { rep[4], rep[1], rep[5], rep[3], rep[2], rep[0] };
  120.         return new Cube(rep2);
  121.     }
  122.  
  123.     public Cube X() {
  124.         int[] rep2 = new int[] { rep[3], rep[2], rep[1], rep[0], rep[5], rep[4] };
  125.         return new Cube(rep2);
  126.     }
  127.  
  128.     public Cube W() {
  129.         int[] rep2 = new int[] { rep[1], rep[0], rep[3], rep[2], rep[5], rep[4] };
  130.         return new Cube(rep2);
  131.     }
  132.  
  133.     public Cube Y() {
  134.         int[] rep2 = new int[] { rep[5], rep[3], rep[4], rep[1], rep[2], rep[0] };
  135.         return new Cube(rep2);
  136.     }
  137.  
  138.     public Cube Z() {
  139.         int[] rep2 = new int[] { rep[4], rep[3], rep[5], rep[1], rep[0], rep[2] };
  140.         return new Cube(rep2);
  141.     }
  142.  
  143.     @Override
  144.     public int compareTo(Cube arg0) {
  145.         for (int i = 0; i < 6; i++)
  146.             if (rep[i] != arg0.rep[i])
  147.                 return rep[i] - arg0.rep[i];
  148.         return 0;
  149.     }
  150.  
  151.     public String toString() {
  152.         System.out.println(" " + rep[0]);
  153.         System.out.println(" " + rep[1]);
  154.         System.out.println(rep[4] + "" + rep[2] + "" + rep[5]);
  155.         System.out.println(" " + rep[3]);
  156.         return "";
  157.     }
  158. }
Add Comment
Please, Sign In to add comment