zoukankan      html  css  js  c++  java
  • 2021“MINIEYE杯”中国大学生算法设计超级联赛(5)HDU7018 Banzhuan(阅读理解)

    Banzhuan

    *Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
    Total Submission(s): 102 Accepted Submission(s): 36
    *

    Problem Description

    Given a three-dimensional space of [1,n]×[1,n]×[1,n]. You're required to place some 1×1×1 cubes to make this 3D space look n×n square from above, from left and from front, while the plane xOy stand for the ground and z axis describes the height.

    But placing these cubes must follow some restrictions. Obviously, it must obey the gravity laws. It means, when beneath a cube is empty, the height of this cube will drop one, until its height is exactly 1 (touch the ground) or there is another cube below it.

    And besides that, placing cubes has some prices. If a cube is placed at an integer coordinate (x,y,z), the price will be x×y2×z.

    Now, satisfying all the requirements above, you're required to calculate the minimum costs and the maximum costs.

    Input

    The first line contains an integer T(T≤15). Then T test cases follow.

    For each test case, input a single integer n per line, while satisfying 1≤n≤1018.

    Output

    For each test case, output two lines. For the first line output the minimum costs mod 109+7. And for the second line, output the maximum costs mod 109+7.

    Sample Input

    1
    2
    

    Sample Output

    27
    60
    

    Source

    2021“MINIEYE杯”中国大学生算法设计超级联赛(5)

    题意极其坑逼...这个题实际上说你可以在一个(n imes n imes n)的空间放(1 imes 1 imes 1)的小立方体,放置的花费是(xy^2z),注意这个花费是放置位置处的花费,比如在(1, 1, 3)的位置放那么花费就是3,但是放完后这个小立方体会掉下去。问防止完后能使整个几何体的三视图都是(n imes n imes n)正方形的最大花费和最小花费。

    最大花费就是在z = n的这一层不断往下扔小立方体直到填满为止。最小花费为先填满最底层,然后在XOY平面的(2, 1), (3, 1)...(n, 1)以及(1, 2), (1, 3)...(1, n)这些位置不断往上放。最终的答案就是(max = n^2frac{n(n+1)}{2}frac{n(n+1)(2n+1)}{6}, min = frac{n^2(n+1)^2(2n+1))}{12}+frac{(n-1)^2(n+2)^2}{4}+(frac{n(n+1)(2n+1)}{6}-1)frac{(n+2)(n-1)}{2})

    注意涉及到除法,比赛的时候因为取模wa了无数次于是怒而写了发java的大数QwQ

    import java.math.BigInteger;
    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int t = sc.nextInt();
            for(int i = 0; i < t; i++) {
                BigInteger n = sc.nextBigInteger();
                BigInteger nn = n.add(n);
                BigInteger mn = BigInteger.ZERO, mx = BigInteger.ZERO;
                BigInteger six = new BigInteger("6");
                BigInteger two = new BigInteger("2");
                BigInteger md = new BigInteger("1000000007");
                mx = n.pow(4);
                mx = mx.multiply(n.add(BigInteger.ONE));
                mx = mx.multiply(n.add(BigInteger.ONE));
                mx = mx.multiply(nn.add(BigInteger.ONE));
                mx = mx.divide(six);
                mx = mx.divide(two);
                mx = mx.mod(md);
                //System.out.println(mx);
    
    
                BigInteger p1 = BigInteger.ZERO, p2 = BigInteger.ZERO, p3 = BigInteger.ZERO;
                p1 = n.pow(2);
                p1 = p1.multiply(n.add(BigInteger.ONE));
                p1 = p1.multiply(n.add(BigInteger.ONE));
                p1 = p1.multiply(nn.add(BigInteger.ONE));
                p1 = p1.divide(six);
                p1 = p1.divide(two);
    
                p2 = n.add(two);
                p2 = p2.multiply(n.add(two));
                p2 = p2.multiply(n.subtract(BigInteger.ONE));
                p2 = p2.multiply(n.subtract(BigInteger.ONE));
                p2 = p2.divide(two);
                p2 = p2.divide(two);
    
                p3 = n.multiply(n.add(BigInteger.ONE));
                p3 = p3.multiply(nn.add(BigInteger.ONE));
                p3 = p3.divide(six);
                p3 = p3.subtract(BigInteger.ONE);
                p3 = p3.multiply(n.add(two));
                p3 = p3.multiply(n.subtract(BigInteger.ONE));
                p3 = p3.divide(two);
                mn = p1.add(p2.add(p3));
                mn = mn.mod(md);
                System.out.println(mn);
                System.out.println(mx);
            }
        }
    }
    
    
  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/15095873.html
Copyright © 2011-2022 走看看