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

34 篇文章 1 订阅
31 篇文章 0 订阅


欧拉定理 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();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值