传送门:Cool Points

题意:给一个圆心为原点的圆和一些线段,问所有线段两端点与圆心连线构成的角度总和占总360度的百分比。

分析:首先将所有线段的两端点变成极角,然后排序(范围[-PI,PI],即从x轴负方向逆时针转一圈),如果某一线段极角值之差大于PI,构成的角度值肯定不是<AOB,而是<AOX+<XOB。因此处理好这种情况,从x轴负向走一圈计值即可。

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#define N 1010
#define PI acos(-1.0)
using namespace std;
struct node
{
double angle;
int num;
node(){}
node(double angle,int num):angle(angle),num(num){}
bool operator<(const node &a)const{
return angle<a.angle;
}
}e[N];
int tot;
void addseg(double x,double y)
{
e[tot++]=node(x,);
e[tot++]=node(y,-);
}
int main()
{
int T,n,r,cas=;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&r);
tot=;
for(int i=;i<=n;i++)
{
double x1,y1,x2,y2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
double a1=atan2(y1,x1),a2=atan2(y2,x2);
if(a1<a2)swap(a1,a2);
if(a1-a2>PI)
{
addseg(a1,PI);
addseg(-PI,a2);
}
else addseg(a2,a1);
}
sort(e,e+tot);
int cnt=;
double ans=,last=-PI;
for(int i=;i<tot;i++)
{
if(cnt==)//前面的线段刚好成对
{
ans+=e[i].angle-last;
}
cnt+=e[i].num;
last=e[i].angle;
}
ans+=PI-last;
printf("Case %d: %.2lf%%\n",cas++,ans/(*PI)*);
}
}

uva 11355(极角计算)的更多相关文章

  1. UVA 11355 Cool Points( 极角计算 )

    We have a circle of radius R and several line segments situated within the circumference of this cir ...

  2. UVa 1606 (极角排序) Amphiphilic Carbon Molecules

    如果,没有紫书上的翻译的话,我觉得我可能读不懂这道题.=_=|| 题意: 平面上有n个点,不是白点就是黑点.现在要放一条直线,使得直线一侧的白点与另一侧的黑点加起来数目最多.直线上的点可以看作位于直线 ...

  3. UVA 11355 Cool Points(几何)

    Cool Points We have a circle of radius R and several line segments situated within the circumference ...

  4. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  5. 【转】UVa Problem 100 The 3n+1 problem (3n+1 问题)——(离线计算)

    // The 3n+1 problem (3n+1 问题) // PC/UVa IDs: 110101/100, Popularity: A, Success rate: low Level: 1 / ...

  6. UVA - 1625 Color Length[序列DP 提前计算代价]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  7. UVa 1606 Amphiphilic Carbon Molecules (扫描法+极角排序)

    题意:平面上有 n 个点,每个点不是黑的就是白的,现在要放一个隔板,把它们分成两部分,使得一侧的白点数加上另一侧的黑点数最多. 析:这个题很容易想到的就是暴力,不妨假设隔板至少经过两个点,即使不经过也 ...

  8. UVa 109 - SCUD Busters(凸包计算)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  9. UVA 11076 Add Again 计算对答案的贡献+组合数学

    A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...

随机推荐

  1. 用 Eclipse 下载 Git 仓库中代码

    1. 安装 Git 插件 可以按照 通过Eclipse从subversion站点下载源码 中的方法安装,也可以在 Eclipse Marketplace 中搜索 EGit 进行安装(Help --&g ...

  2. 基于visual Studio2013解决C语言竞赛题之1036递归求值

          题目 解决代码及点评 /* 36.已知有如下递推公式 求该数列的前n项.不允许使用数组. */ float fp50036(int n,float x,float ...

  3. nginx使用自认证的https证书

    生成证书 可以通过以下步骤生成一个简单的证书: 创建服务器私钥: $ openssl genrsa -out server.key 2048 需要输入一系列的信息 创建签名请求的证书(CSR): $ ...

  4. 【linux】 Makefile之make menuconfig /uImage

      欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http: ...

  5. 基于visual Studio2013解决C语言竞赛题之1087数字变换

        题目 解决代码及点评 /************************************************************************/ /* ...

  6. 浅析嵌入式Linux系统的构成和启动过程

    在我们的周围,大量的嵌入式设备都是基于Linux系统来构建的,嵌入式Linux与主机Linux相比有着自己的一些特点,本文就嵌入式Linux系统的构成和启动过程做一些总结. 一.嵌入式Linux系统构 ...

  7. 跟Google学习Android开发-起始篇-与其它应用程序交互(1)

    6 与其它应用程序交互 一个Android应用程序通常有多个活动.每一项活动都将显示一个用户界面,允许用户执行某种特定任务(如查看地图或者照片).为了把用户从一个活动带到另一个,你的应用必须使用Int ...

  8. 【Cocos2d-X开发学习笔记】第28期:游戏中音乐和音效的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 UI在游戏中占有很重要的地位,但吸引玩家的除了这 ...

  9. python 站点爬虫 下载在线盗墓笔记小说到本地的脚本

    近期闲着没事想看小说,找到一个全是南派三叔的小说的站点,决定都下载下来看看,于是动手,在非常多QQ群里高手的帮助下(本人正則表達式非常烂.程序复杂的正则都是一些高手指导的),花了三四天写了一个脚本 须 ...

  10. Servlet的学习(一)

    初识Servlet Servlet是一门专门用于开发动态web资源的技术,Sun公司在其API中提供了一个Servlet接口(当然,我们不会去直接实现这个接口,而是去继承其实现类会更好),因此,狭义的 ...