UVA - 10213 How Many Pieces of Land?(欧拉公式 + 高精度)

圆上有n个点,位置不确定。问这些点两两连接成的线段,最多可以把圆划分成多少块平面?

欧拉公式:V-E+F = 2,V是点数,E是边数,F是面数。

答案是F=C(n,4)+C(n,2)+1,看的别人推的。。我实在推不出来。

写这篇博客的原因是第一次用Java的BigInteger。

import java.math.BigInteger;
import java.util.*;

public class Main{
	static Scanner sc = new Scanner(System.in);
	public static void main(String args[]){
		int t = sc.nextInt();
		for (int ca = 1; ca <= t; ca++)
		{
			String s = sc.next();
			BigInteger n = new BigInteger(s);
			BigInteger ans = BigInteger.valueOf(1);
			BigInteger tmp = new BigInteger(s);
			for (int i = 1; i <= 3; i++)
			{
				BigInteger k = BigInteger.valueOf(i);
				tmp = tmp.multiply(n.subtract(k));
			}
			for (int i = 1; i <= 4; i++)
			{
				BigInteger k = BigInteger.valueOf(i);
				tmp = tmp.divide(k);
			}
			ans = ans.add(tmp);

			tmp = new BigInteger(s);
			tmp = tmp.multiply(n.subtract(BigInteger.valueOf(1)));
			tmp = tmp.divide(BigInteger.valueOf(2));

			ans = ans.add(tmp);
			System.out.println(ans);
		}
	}
}

原文地址:https://www.cnblogs.com/ruthank/p/10348861.html

时间: 2024-10-29 18:08:44

UVA - 10213 How Many Pieces of Land?(欧拉公式 + 高精度)的相关文章

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

欧拉定理 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

UVa 10213 - How Many Pieces of Land ?(欧拉公式)

链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1154 题意: 有一块椭圆形的地.在边界上选n(0≤n<2^31)个点并两两连接得到n(n-1)/2条线段.它们最多能把地分成多少个部分? 分析: 本题需要用到欧拉公式:在平面图中,V-E+F=2,其中V是顶点数,E是边数,F是面数.因此,只需要计算V和E即可(注意还要减去外面

uva 10213 How Many Pieces of Land (欧拉公式计算多面体)

题意:在一个圆上取n个点,求最多能将圆分为多少块: 思路:欧拉公式计算多面体: 欧拉公式:简单多面体的顶点数V.面数F及棱数E之间的关系为V+F-E=2; 首先考虑点数v,有n个在圆上的点,任取一点x,考虑与x相连的每条对角线,假设对角线左边有i个顶点,则右边应有(n-2-i)个顶点,这些顶点相互连接可以产生i*(n-i-2)个顶点,再将所有的x与所有的对角线l求和.每个交点分别算了4次(一个交点由两条线产生,有4个圆上的点会计算到),除以4: V=n+n/4*(西格玛i=1到n-3) i*(n

【分割圆】Uva 10213 - How Many Pieces of Land ?

一个椭圆上有N个点,将这n个点两两相连,问最多能将这个椭圆分成多少片. 理清思路,慢慢推. 首先我们要想到欧拉公式:V+E-F=2 其中V为图上的顶点数,E为边数,F为平面数. 计算时的可以枚举点,从一个固定点出发的对角线(注意是对角,不包括与相邻点的连线),它的左边有i个点,那么右边就有n-2-i个点.左边与右边的点两两相连,能在这一条对角线上相交i*(n-2-i)各点. 一个固定点能与其他非相邻点连接n-3条对角线,那么一个固定点的连线就会生成sigema(i=1,n-3)(i*(n-2-i

UVa 10213 How Many Pieces of Land ? (计算几何+大数)

题意:一块圆形土地,在圆周上选n个点,然后两两连线,问把这块土地分成多少块? 析:这个题用的是欧拉公式,在平面图中,V-E+F=2,其中V是顶点数,E是边数,F是面数.对于这个题只要计算V和E就好. 我们从一个顶点开始枚举对角线,这条线左边有 i 个点,那么右边有 n-i-2 个点,那么两边的连线在这条对角线上形成 i * (n-i-2) 个交点,得到 i * (n-i-2) + 1条线段,然而每个交点, 重复计算了四次,每条线段被重复计算了二次,所以总数就是,,V 加 n 的意思就是加上原来的

UVA 10497 - Sweet Child Makes Trouble(DP+高精度)

题目链接:10497 - Sweet Child Makes Trouble 题意:n个物品,原来物品属于一个地方,现在要把物品重新放回去,问能放几种使得每个物品都与原来位置不同 思路:递推,一开始随便搞了个二维状态,dp[i][j]表示i个物品,有j个位置不同,那么dp[n][n]就是答案,递推式为: dp[i][j] = 1 (j == 0) dp[i][j] = (j - 1) * dp[i - 1][j - 1] + dp[i - 1][j] + (i - j + 1) * dp[i -

UVa 10213 (欧拉公式+Java大数) How Many Pieces of Land ?

题意: 一块圆形土地,在圆周上选n个点,然后两两连线,问把这块土地分成多少块? 分析: 首先紫书上的公式是错的,不过根据书上提供的思路很容易稍加修改得到正确答案! 然后推公式吧,这里用到平面图的欧拉公式,V - E + F = 2,其中V表示顶点个数,E表示边的个数,F表示面的块数. 减去最外面的无限大的面,所求ans = E - V + 1 假设n≥4,从圆周上的一个点出发枚举一条对角线,左边有i个点,右边有n-2-i个点,将左右两边的点两两相连,就在这条对角线上得到个交点.每个交点被重复计算

划分土地(how many pieces of land)

题目描述: 给一个椭圆,上面有n个点,两两连接这n个点,得到的线段能把椭圆分为几个区域? 思路: 首先想想,n个点在椭圆边缘,每两个点两两连接有\(C^2_n\)条线段,这些线段交于很多点,求这些线段最多把椭圆分成几个部分. 考虑到欧拉公式:在平面图中\(V-E+F=2\),\(V\)为顶点数,\(E\)是边数,\(F\)是面数.我们要求的是\(F\),只要求\(E\)与\(V\)就行了.那么怎么求\(V\)呢? 考虑每一个顶点,以这个顶点为基础,不断向其他点发出对角线,在对角线左边的点是\(i

hdu 5050 Divided Land(JAVA高精度)

import java.util.Scanner; import java.math.BigInteger; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int T; T=cin.nextInt(); BigInteger a,b; for(int cas=1;cas<=T;cas++){ a=cin.nextBigInteger(2); b=ci