UVA 10213 How Many Pieces of Land? 欧拉定理

来源:互联网 发布:量化对冲交易软件 编辑:程序博客网 时间:2024/05/16 18:52


欧拉定理 V-E+F=C+1


Problem G
How Many Pieces of Land?
Input: Standard Input
Output: Standard Output
Time Limit: 3 seconds

 

You are given an elliptical shaped land and you are asked to choose n arbitrary points on its boundary. Then you connect all these points with one another with straight lines (that’s n*(n-1)/2 connections for n points). What is the maximum number of pieces of land you will get by choosing the points on the boundary carefully?

 


Fig: When the value of n is 6.

 

Input

The first line of the input file contains one integer S (0 < S < 3500), which indicates how many sets of input are there. The next S lines contain S sets of input. Each input contains one integer N (0<=N<2^31).

 

Output

For each set of input you should output in a single line the maximum number pieces of land possible to get for the value of N.

 

Sample Input:

4
1
2
3
4

 

Sample Output:

1
2
4
8

Shahriar Manzoor



/** * Created by ckboss on 15-2-1. */import java.math.BigInteger;import java.util.*;public class Main {    BigInteger pfh(BigInteger n){        return n.multiply((n.add(BigInteger.ONE))).multiply((n.multiply(BigInteger.valueOf(2))).add(BigInteger.ONE)).divide(BigInteger.valueOf(6));    }    BigInteger getV(BigInteger n){        BigInteger A = n.subtract(BigInteger.valueOf(2));        BigInteger B = n.subtract(BigInteger.valueOf(3));        BigInteger temp = A.multiply(B).divide(BigInteger.valueOf(2)).multiply(A).subtract(pfh(B));        temp = temp.multiply(n).divide(BigInteger.valueOf(4));        return temp.add(n);    }    BigInteger getE(BigInteger n){        BigInteger A = n.subtract(BigInteger.valueOf(2));        BigInteger B = n.subtract(BigInteger.valueOf(3));        BigInteger temp = A.multiply(B).divide(BigInteger.valueOf(2)).multiply(A).subtract(pfh(B)).add(n).subtract(BigInteger.ONE);        temp = temp.multiply(n).divide(BigInteger.valueOf(2));        return temp.add(n);    }    Main(){        Scanner in = new Scanner(System.in);        int T_T = in.nextInt();        while(T_T-->0) {            BigInteger n = in.nextBigInteger();            BigInteger V = getV(n);            BigInteger E = getE(n);            BigInteger F = BigInteger.ONE.subtract(V).add(E);            System.out.println(F);        }    }    public static void main(String[] args){        new Main();    }}


0 0
原创粉丝点击