UVa 11529
题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173
解题思路:
先求出对于每一个点,有多少个三角形包含它,把各个点得到的数值加起来的总和除以 C[n][3] 即可得出答案。对于每一个点,可以求出有多少个三角形不包含它,设为tmp,C[n-1][2] - tmp = 包含这个点的三角形数。那么现在的问题就是如何求出不包含这个点的三角形数:
我们先把指定的这个点作为原点将其他所有点进行极角排序,从0开始枚举排序后的每一个点,把原点到枚举的点的射线作为一个平角的一条边,那么所有在这个平角的一侧的点与枚举的点组成的三角形都不会经过原点。好吧,这部分好难讲,而且我又很菜很菜,只能在代码里面尽量作些注释。
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath> using namespace std;
typedef long long ll;
const int maxn=+;
const double PI=acos(-1.0);
struct point{
double x,y;
}inp[maxn];
int n;
double r[maxn<<];
double s;
double counts(int d){
int cnt=;
for(int i=;i<n;i++){
if(i==d) continue;
double tp=atan2(inp[i].y-inp[d].y,inp[i].x-inp[d].x);
r[cnt]=tp;
r[cnt+n-]=tp+*PI; //这里对每一个角多做了一个投影,防止后面的点找不到180度以内的点
cnt++;
}
cnt=*n-;
sort(r,r+cnt);
double ans=;
int mv=;
for(int i=;i<n-;i++){
double tmp=r[i]+PI;
while(tmp>r[mv]) mv++; //这个mv有效的防止了重复计算
double cnt=mv-i-;
ans+=cnt*(cnt-)/;
}
return s-ans;
}
int main(){
int kase=;
while(scanf("%d",&n)==&&n){
for(int i=;i<n;i++) scanf("%lf %lf",&inp[i].x,&inp[i].y);
s=(double)(n-)*(n-)*(n-)/6.0; //C[n-1][3]
double ans=0.0;
double sum=(double)n*(n-)*(n-)/6.0; //C[n][3]
for(int i=;i<n;i++)
ans+=counts(i);
printf("City %d: %.2lf\n",kase++,ans/sum);
}
return ;
}
UVa 11529的更多相关文章
- uva 11529 - Strange Tax Calculation(计数问题)
题目链接:uva 11529 - Strange Tax Calculation 题目大意:给出若干个点,保证随意三点不共线.随意选三个点作为三角行,其它点若又在该三角形内,则算是该三角形内部的点.问 ...
- UVa 11529 (计数) Strange Tax Calculation
枚举一个中心点,然后将其他点绕着这个点按照极角排序. 统计这个中心点在外面的三角形的个数,然后用C(n-1, 3)减去这个数就是包含这个点的三角形的数量. 然后再枚举一个起点L,终点为弧度小于π的点R ...
- uva 11529 Strange Tax Calculation (几何+计数)
题目链接: http://vjudge.net/problem/viewProblem.action?id=18277 这题暴力n^4妥妥的TLE!即使n^3也可能会T 正确的姿势应该是:枚举每个点作 ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
随机推荐
- 自动化部署jenkins
jenkins下载网站 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/ 一.配置环境 [root@localhost ~]# hostname ...
- js高阶函数的理解
高阶函数:英文叫Higher-order function.JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数 ...
- Android 项目 Android 学习手册(一)
前言: 当每次查询android 知识的时候,内心是凌乱的,总觉得要是有一个工具多好, 尤其在手机端如何可以查询的话,会非常完美,能大大减少选择查询的时间, 之前见了很多java 学习手册,把一些重要 ...
- 解析.xml并保存结点信息至.txt中
@ 思路 利用java开源库dom4j解析.xml: dom4j操作xml - 读取xml,生成一个document实例: SAXReader reader = new SAXReader(); Do ...
- USACO Training Section 1.2 双重回文数 Dual Palindrom
题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做"回文数".例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就 ...
- windows中配置安装mysql数据库
MySql 是一种免费的关系型数据库,相较于 MsSqlServer 和 Oracle 比较轻量化,安装也很简单,而且免费不需要的版权费用,个人认为一般的小项目采用还是比较合适的,当然也有部分数据量很 ...
- 2249: Altruistic Amphibians 01背包
Description A set of frogs have accidentally fallen to the bottom of a large pit. Their only means o ...
- K - Leapin' Lizards HDU - 2732 网络流
题目链接:https://vjudge.net/contest/299467#problem/K 这个题目从数据范围来看可以发现是网络流,怎么建图呢?这个其实不是特别难,主要是读题难. 这个建图就是把 ...
- maven基本配置
1.maven 是一个项目构建工具,如果在公司做大的项目 ,需要把项目拆分成很多子项目,为了方便各子项目之间协同开发和调试,一般都会使用maven.使用maven和以前web项目最大的不同是jar包的 ...
- 【Spark】帮你搞明白怎么通过SparkSQL整合Hive
文章目录 一.创建maven工程,导包 二.开发代码 一.创建maven工程,导包 <properties> <scala.version>2.11.8</scala.v ...