Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.math.BigInteger;
- import java.util.Arrays;
- import java.util.Scanner;
- import java.util.TreeSet;
- public class UVa10733 {
- public static int find(int i, int[] p) {
- if (p[i] == i)
- return i;
- return p[i] = find(p[i], p);
- }
- public static void union(int a, int b, int[] p) {
- int p1 = find(a, p);
- int p2 = find(b, p);
- p[p1] = p2;
- }
- public static void main(String[] args) {
- int[] a = { 3, 5 };
- int[] b = { 3, 5 };
- TreeSet<Cube> S = new TreeSet<Cube>();
- Cube c = new Cube();
- for (int i = -3; i <= 3; i++)
- for (int j = -3; j <= 3; j++)
- for (int k = 0; k <= 1; k++)
- for (int l = 0; l <= 1; l++)
- for (int m = 0; m <= 1; m++)
- for (int n = 0; n <= 1; n++) {
- Cube x = c.rotateH(i).rotateV(j);
- if (k == 1)
- x = x.X();
- if (l == 1)
- x = x.W();
- if (m == 1)
- x = x.Z();
- if (n == 1)
- x = x.Y();
- S.add(x);
- }
- int[] pow = new int[7];
- for (Cube cc : S) {
- int[] p = { 0, 1, 2, 3, 4, 5 };
- for (int i = 0; i < cc.rep.length; i++)
- union(i, cc.rep[i], p);
- int cnt = 0;
- for (int i = 0; i < p.length; i++) {
- if (find(i, p) == i)
- cnt++;
- }
- pow[cnt]++;
- }
- BigInteger div = new BigInteger("24");
- BigInteger[] res = new BigInteger[1001];
- for (int i = 1; i < res.length; i++) {
- res[i] = new BigInteger("0");
- for (int j = 0; j <= 6; j++) {
- res[i] = res[i].add((new BigInteger(i + "").pow(j)
- .multiply(new BigInteger(pow[j] + ""))));
- }
- res[i] = res[i].divide(div);
- }
- Scanner in = new Scanner(System.in);
- while (in.hasNext()) {
- int n = in.nextInt();
- if (n == 0)
- break;
- System.out.println(res[n]);
- }
- }
- }
- class Cube implements Comparable<Cube> {
- int[] rep;
- public Cube(int[] rep) {
- this.rep = rep;
- }
- public Cube() {
- rep = new int[] { 0, 1, 2, 3, 4, 5 };
- }
- public Cube rotateV(int n) {
- if (n == 0)
- return new Cube(rep);
- else if (n > 0)
- return rotate90_V().rotateV(n - 1);
- else
- return rotateN90_V().rotateV(n + 1);
- }
- public Cube rotateH(int n) {
- if (n == 0)
- return new Cube(rep);
- else if (n > 0)
- return rotate90_H().rotateV(n - 1);
- else
- return rotateN90_H().rotateV(n + 1);
- }
- public Cube rotate90_V() {
- int[] rep2 = new int[] { rep[3], rep[0], rep[1], rep[2], rep[4], rep[5] };
- return new Cube(rep2);
- }
- public Cube rotate90_H() {
- int[] rep2 = new int[] { rep[5], rep[1], rep[4], rep[3], rep[0], rep[2] };
- return new Cube(rep2);
- }
- public Cube rotateN90_V() {
- int[] rep2 = new int[] { rep[1], rep[2], rep[3], rep[0], rep[4], rep[5] };
- return new Cube(rep2);
- }
- public Cube rotateN90_H() {
- int[] rep2 = new int[] { rep[4], rep[1], rep[5], rep[3], rep[2], rep[0] };
- return new Cube(rep2);
- }
- public Cube X() {
- int[] rep2 = new int[] { rep[3], rep[2], rep[1], rep[0], rep[5], rep[4] };
- return new Cube(rep2);
- }
- public Cube W() {
- int[] rep2 = new int[] { rep[1], rep[0], rep[3], rep[2], rep[5], rep[4] };
- return new Cube(rep2);
- }
- public Cube Y() {
- int[] rep2 = new int[] { rep[5], rep[3], rep[4], rep[1], rep[2], rep[0] };
- return new Cube(rep2);
- }
- public Cube Z() {
- int[] rep2 = new int[] { rep[4], rep[3], rep[5], rep[1], rep[0], rep[2] };
- return new Cube(rep2);
- }
- @Override
- public int compareTo(Cube arg0) {
- for (int i = 0; i < 6; i++)
- if (rep[i] != arg0.rep[i])
- return rep[i] - arg0.rep[i];
- return 0;
- }
- public String toString() {
- System.out.println(" " + rep[0]);
- System.out.println(" " + rep[1]);
- System.out.println(rep[4] + "" + rep[2] + "" + rep[5]);
- System.out.println(" " + rep[3]);
- return "";
- }
- }
Add Comment
Please, Sign In to add comment