UVALive - 3263 That Nice Euler Circuit (几何)
UVALive - 3263 That Nice Euler Circuit (几何)
ACM
题目地址:
UVALive - 3263 That Nice Euler Circuit
题意:
给出一个点,问连起来后的图形把平面分为几个区域。
分析:
欧拉定理有:设平面图的顶点数、边数、面数分别V,E,F则V+F-E=2
大白的题目,做起来还是非常有技巧的。
代码:
/*
* Author: illuz <iilluzen[at]gmail.com>
* File: LA3263.cpp
* Create Date: 2014-09-18 23:18:47
* Descripton: V+F-E=2
*/ #include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
#define repf(i,a,b) for(int i=(a);i<=(b);i++) typedef long long ll; const int N = 310;
const double eps = 1e-8;
const double PI = acos(-1.0); int sgn(double x) {
if (fabs(x) < eps) return 0;
if (x < 0) return -1;
else return 1;
} struct Point {
double x, y;
Point() {}
Point(double _x, double _y) {
x = _x; y = _y;
}
Point operator -(const Point &b) const {
return Point(x - b.x, y - b.y);
} //叉积
double operator ^(const Point &b) const {
return x*b.y - y*b.x;
} //点积
double operator *(const Point &b) const {
return x*b.x + y*b.y;
}
//绕原点旋转角度B(弧度值),后x,y的变化
void transXY(double B) {
double tx = x,ty = y;
x = tx*cos(B) - ty*sin(B);
y = tx*sin(B) + ty*cos(B);
} bool operator <(const Point &b) const {
return x < b.x || (x == b.x && y < b.y);
} bool operator ==(const Point &b) const {
return x == b.x && y == b.y;
} void read() {
scanf("%lf", &x);
scanf("%lf", &y);
} void print() {
printf("debug: x = %f, y = %f\n", x, y);
}
}; struct Line
{
Point s,e;
Line(){}
Line(Point _s,Point _e) {
s = _s;e = _e;
} //两直线相交求交点
//第一个值为0表示直线重合,为1表示平行,为0表示相交,为2是相交
//仅仅有第一个值为2时,交点才有意义
pair<int,Point> operator &(const Line &b)const {
Point res = s;
if(sgn((s-e)^(b.s-b.e)) == 0) {
if(sgn((s-b.e)^(b.s-b.e)) == 0)
return make_pair(0,res);//重合
else return make_pair(1,res);//平行
}
double t = ((s-b.s)^(b.s-b.e)) / ((s-e)^(b.s-b.e));
res.x += (e.x-s.x)*t;
res.y += (e.y-s.y)*t;
return make_pair(2,res);
}
}; //*两点间距离
double dist(Point a,Point b) {
return sqrt((a-b)*(a-b));
} //*推断点在线段上
bool OnSeg(Point P,Line L) {
return
sgn((L.s-P)^(L.e-P)) == 0 &&
sgn((P.x - L.s.x) * (P.x - L.e.x)) <= 0 &&
sgn((P.y - L.s.y) * (P.y - L.e.y)) <= 0;
} Point p[N], v[N*N];
Line a, b;
int c, e, n, cas; int main() {
ios_base::sync_with_stdio(0);
cas = 0;
while (scanf("%d", &n) && n) {
repf (i, 0, n - 1) {
p[i].read();
v[i] = p[i];
}
n--;
c = n;
repf (i, 0, n - 1) {
a.s = p[i];
a.e = p[i + 1];
repf (j, i + 1, n - 1) {
b.s = p[j];
b.e = p[j + 1];
pair<int,Point> t = a & b;
if (t.first == 2 && OnSeg(t.second, a) && OnSeg(t.second, b))
v[c++] = t.second;
}
}
sort(v, v + c);
c = unique(v, v + c) - v; e = n;
repf (j, 0, n - 1) {
a.s = p[j];
a.e = p[j + 1];
repf (i, 0, c - 1) {
if (p[j] == v[i] || p[j + 1] == v[i])
continue;
if (OnSeg(v[i], a))
e++;
}
}
// cout << e << c << endl;
printf("Case %d: There are %d pieces.\n", ++cas, e + 2 - c);
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
UVALive - 3263 That Nice Euler Circuit (几何)的更多相关文章
- UVALi 3263 That Nice Euler Circuit(几何)
That Nice Euler Circuit [题目链接]That Nice Euler Circuit [题目类型]几何 &题解: 蓝书P260 要用欧拉定理:V+F=E+2 V是顶点数; ...
- uvalive 3263 That Nice Euler Circuit
题意:平面上有一个包含n个端点的一笔画,第n个端点总是和第一个端点重合,因此团史一条闭合曲线.组成一笔画的线段可以相交,但是不会部分重叠.求这些线段将平面分成多少部分(包括封闭区域和无限大区域). 分 ...
- UVAlive 3263 That Nice Euler Circuit(欧拉定理)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21363 [思路] 欧拉定理:V+F-E=2.则F=E-V+2. 其 ...
- UVALive 3263: That Nice Euler Circuit (计算几何)
题目链接 lrj训练指南 P260 //==================================================================== // 此题只需要考虑线 ...
- LA 3263 That Nice Euler Circuit(欧拉定理)
That Nice Euler Circuit Little Joey invented a scrabble machine that he called Euler, after the grea ...
- 简单几何(求划分区域) LA 3263 That Nice Euler Circuit
题目传送门 题意:一笔画,问该图形将平面分成多少个区域 分析:训练指南P260,欧拉定理:平面图定点数V,边数E,面数F,则V + F - E = 2.那么找出新增的点和边就可以了.用到了判断线段相 ...
- That Nice Euler Circuit(LA3263+几何)
That Nice Euler Circuit Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu D ...
- poj2284 That Nice Euler Circuit(欧拉公式)
题目链接:poj2284 That Nice Euler Circuit 欧拉公式:如果G是一个阶为n,边数为m且含有r个区域的连通平面图,则有恒等式:n-m+r=2. 欧拉公式的推广: 对于具有k( ...
- POJ2284 That Nice Euler Circuit (欧拉公式)(计算几何 线段相交问题)
That Nice Euler Circuit Time Limit: 3000MS M ...
随机推荐
- ASP.NET Core MVC Hello World
ASP.NET Core 现在ASP.NET Core还在不断成长.更新中,说不定到了明天又换了个模样,就如同一个小孩,从蹒跚学步,到奔向未来. 所以我们可以相应的去理解更新中所发生的变化,包容它.呵 ...
- AndroidUI组件之ListView小技巧
android:fadingEdge="none"//出去黑影 android:listSelector="@android:color/transparent&quo ...
- Android规范发展
一.Android 编码规范 1.java 代码中不出现中文.最多凝视中能够出现中文 2.局部变量命名.静态成员变量命名 仅仅能包括字母,单词首字母出第一个外,都为大写,其它字母都为小写 3.常量命名 ...
- php:修改NetBeans默认字体
在Netbeans中由于使用了Swing进行开发,所以其中界面的字体也是由Java虚拟机进行配置而不是随操作系统的.在安装完Netbeans后默认的字体大小是11px.而在Windows下的宋体最小支 ...
- 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写
基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...
- F5当刷新页面,出现“要再次显示此页,web该浏览器,你曾经有过发送消息再次提交...点击重试",如何防止此对话框解决方案的出现,
如何取消刷新页面弹出"重试"对话? 找了好多类似的问题都没有我想要的答案,请大家看清楚再回答. 比方说,登录过程中,成功之后转向还有一个页面success.jsp, 这时,假设刷新 ...
- logback与Spring、SpringMVC结合使用教程(转) logback good
摘要:本文主要介绍了如何在spring.springMVC中使用logback 一.logback与Spirng结合使用 1.maven添加引用: <dependency> <gro ...
- effective c++ 条款6 如果不想要就要告诉大家
这个条款应该和第五个放在一起 编译器默认生成 1 无参构造函数, 2 析构函数 3 拷贝构造函数 4 赋值预算符 当我们不需要,就要显示的告诉大家我们不需要. 方法:自己声明这个函数为private, ...
- Unity3D方法来隐藏和显示对象
Unity3D作 在使用unity3d开发游戏的过程中.我们经常会遇到须要隐藏或者显示的操作,针对这一点,以下做了一些总结. 一.设置Renderer状态 在游戏的开发中,全部可以被渲染的物体都包括有 ...
- SecureCRT 6.7.1 RI和谐 皴 补丁 方法
它之前被使用SecureCRT 6.5.3 版本号,咋看和谐补丁,即使中国版本也可(现在才发现SecureCRT.6.2.0) 可是换为 6.7.1 后就怎么也注冊不了了.. 没办法试了各种办法: 先 ...