zoukankan      html  css  js  c++  java
  • HDU 3547 DIY Cube

    HDU_3547

        这个题目是《组合数学》上面的一个例题。

        一开始我想的是任意一种旋转操作都可以是看成以沿穿过对面的中轴线的3种旋转操作组合而成的,只和操作的数量有关,而和操作的顺序无关,但后来很快发现了反例,于是如果再顺着这个思路考虑操作的顺序话,运算就相当庞大了。

        于是还是不得不只从单一方向的旋转考虑。实际上旋转按旋转轴分类是有4种的:

        ①原地不动。

        ②绕穿过对面的中轴线旋转。

        ③绕穿过对棱的中轴线旋转。

        ④绕正方体对角线旋转。

        这4种情况一共包含了24种旋转操作,都考虑全面之后再应用大数运算就可以了。

    import java.math.BigInteger;
    import java.util.Scanner;

    public class Main {
    static Scanner cin = new Scanner(System.in);
    public static void main(String[] args) {
    int t = cin.nextInt();
    for(int tt = 0; tt < t; tt ++)
    {
    BigInteger n = cin.nextBigInteger();
    System.out.print("Case " + (tt + 1) + ": ");
    solve(n);
    }
    }
    static void solve (BigInteger n)
    {
    BigInteger ans = new BigInteger("0");
    ans = ans.add(n.pow(8));
    ans = ans.add(n.pow(2).add(n.pow(4)).add(n.pow(2)).multiply(BigInteger.valueOf(3)));
    ans = ans.add(n.pow(4).multiply(BigInteger.valueOf(6)));
    ans = ans.add(n.pow(4).add(n.pow(4)).multiply(BigInteger.valueOf(4)));
    ans = ans.divide(BigInteger.valueOf(24));
    if(ans.compareTo(new BigInteger("1000000000000000")) >= 0)
    {
    ans = ans.mod(new BigInteger("1000000000000000"));
    int k = 15 - ans.toString().length();
    for(int i = 0; i < k; i ++)
    System.out.print("0");
    }
    System.out.println(ans);
    }
    }


  • 相关阅读:
    CSS复合选择器
    CSS样式规则及字体样式
    jQuery 样式操作
    jQuery 选择器
    jQuery 的基本使用
    jQuery 介绍
    本地存储
    移动端常用开发框架
    移动端常用开发插件
    移动端click 延时解决方案
  • 原文地址:https://www.cnblogs.com/staginner/p/2386012.html
Copyright © 2011-2022 走看看