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个点,将左右两边的点两两相连,就在这条对角线上得到个交点。每个交点被重复计算4次,再加上圆周上的n个点,所以
接下来E也很好计算,一条对角线有个交点,所以就有
条边,而这里要注意,每条边是被重复计算2次的。再加上圆周被n个点分隔开的n条边和n个点相邻两点的连线有n条边,所以
然后再根据这两个公式、
化简一下得到
后来发现,这道题还需要高精度,于是乎我傻乎乎地写了高精度加法和乘法,后来发现还需要除法,除法实在不会写。又想到lw学长整理过Java的BigInteger类的一些相关东西(工具」 Java总结 Version1.0),于是从没接触过Java的我,从安装Java JDK开始,怒学一下午Java,终于把这道题A了。不说了,我好累,不过也很欣慰。
import java.io.*;
import java.util.*;
import java.math.*; public class Main
{
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); public static void main(String args[]) throws IOException
{
Scanner cin=new Scanner(System.in);
int kase = cin.nextInt();
for(int c = 1; c <= kase; ++c)
{
BigInteger ans = BigInteger.valueOf(1);
String s = cin.next();
BigInteger n = new BigInteger(s);
BigInteger temp = new BigInteger(s);
//System.out.println("temp = " + temp);
temp = temp.multiply(temp.subtract(new BigInteger("1")));
//System.out.println("temp = " + temp);
temp = temp.divide(new BigInteger("2"));
//System.out.println("temp = " + temp);
ans = ans.add(temp);
temp = temp.multiply(n.subtract(new BigInteger("2")));
temp = temp.multiply(n.subtract(new BigInteger("3")));
temp = temp.divide(new BigInteger("12"));
ans = ans.add(temp);
System.out.println(ans);
}
}
}
慢吞吞的Java君
UVa 10213 (欧拉公式+Java大数) How Many Pieces of Land ?的更多相关文章
- HDU4762(JAVA大数)
		
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
 - Java 大数、高精度模板
		
介绍: java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作.因 ...
 - java大数
		
java大数还是很好用的! 基本加入: import java.math.BigInteger; import jave.math.BigDecimal; 分别是大数和大浮点数. 首先读入可以用: S ...
 - JAVA大数运算
		
java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public stat ...
 - java大数总结【转】
		
java大数(2013长春网络赛)--hdu4762总结一下:1.java提交类要写Main.2.读取大数. Scanner read=new Scanner(System.in); BigInteg ...
 - HDU5047Sawtooth(java大数)
		
HDU5047Sawtooth(java大数) 题目链接 题目大意:在一个矩形内画n个"M".问如何画可以把这个矩形分成最多的区域. 给出这个区域的数目. 解题思路:最好的方式就是 ...
 - JAVA大数类
		
JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...
 - ZOJ3477&JAVA大数类
		
转:http://blog.csdn.net/sunkun2013/article/details/11822927 import java.util.*; import java.math.BigI ...
 - 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&记忆化递归
		
HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...
 
随机推荐
- Spark Streaming揭秘 Day34 解析UI监听模式
			
Spark Streaming揭秘 Day34 解析UI监听模式 今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式. ...
 - 拓展,Fibonacci螺旋
			
#该程序由023递归这课中的fibonacci数列递归写法修改而成 #在写的过程中发现,如果要正确引导用户的每一次输入,写的代码比主程序还要多 #当然,为了使程序在用户交互过程中显得更加友好,提供错误 ...
 - Web服务器集群搭建关键步骤纪要
			
前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...
 - JavaScript技巧45招
			
原文:45 Useful JavaScript Tips, Tricks and Best Practices作者:Saad Mousliki 在这篇文章里,我将分享一些JavaScript的技巧.秘 ...
 - 使用plspl创建orcale作业
			
1.由于权限问题,第一步应先以sys账户登录,路径:工具->DBMS 调试程序->作业 ,新建一个作业,出现如下图的窗口 2.开始依次填写相应内容,Name为作业名字,注意要加上用户名前 ...
 - (转)《深入理解java虚拟机》学习笔记2——Java内存溢出实例
			
通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收 ...
 - 简单加密算法在C#中的实现
			
加密是指通过某种特殊的方法,更改已有信息的内容,是的未授权的用户即使得到了加密的信息,如果没有正确的解密算法,那么也无法得到信息的内容. 方法一: //须添加对System.Web的引用 using ...
 - class_create(),device_create自动创建设备文件结点
			
class_create(),device_create自动创建设备文件结点 从linux 内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代.相比devfs,udev有很多优 ...
 - EXTJS 4.2 资料 控件lable定义
			
代码: { xtype:'label', id:'label', labelSeparator :'', // 去掉laebl中的冒号 fieldLabel : '这是个label' } 赋值: Ex ...
 - 【tyvj1860】后缀数组
			
描述 我们定义一个字符串的后缀suffix(i)表示从s[i]到s[length(s)]这段子串.后缀数组(Suffix array)SA[i]中存放着一个排列,满足suffix(sa[i])< ...