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;
}



版权声明:本文博客原创文章,博客,未经同意,不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4659191.html,如需转载请自行联系原作者


相关文章
|
运维 Prometheus 分布式计算
阿里云 ACK One 多集群管理全面升级:多集群服务、多集群监控、两地三中心应用容灾
本文介绍了 ACK One 近期发布的 3 个主要特性,覆盖了多集群管理的 3 个主要场景,跨集群服务发现与访问、多集群全局监控、应用容灾。除多集群管理外,ACK One 更是支持连接并管理任何地域、任何基础设施上的 Kubernetes 集群,提供一致的管理和社区兼容的 API,支持对计算、网络、存储、安全、监控、日志、作业、应用、流量等进行统一运维管控。
阿里云 ACK One 多集群管理全面升级:多集群服务、多集群监控、两地三中心应用容灾
|
7月前
|
机器学习/深度学习 决策智能 网络架构
C-3PO:多智能体强化学习赋能检索增强生成
C-3PO:多智能体强化学习赋能检索增强生成
223 2
|
安全 数据安全/隐私保护 Android开发
探索Android 12中的隐私保护特性
随着数字化时代的到来,个人隐私保护成为全球关注的焦点。Android作为广泛使用的操作系统之一,其在最新发布的Android 12版本中引入了多项隐私保护功能。本文将深入探讨这些新特性如何增强用户数据的安全性,以及它们对应用开发者和普通用户的具体影响。
286 30
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
浅谈机器学习与深度学习的区别
浅谈机器学习与深度学习的区别
298 0
|
编解码 人工智能 文件存储
卷积神经网络架构:EfficientNet结构的特点
EfficientNet是一种高效的卷积神经网络架构,它通过系统化的方法来提升模型的性能和效率。
398 1
|
存储 人工智能 物联网
端侧设备AI代理优化框架问世,领域内准确率可达97%
【7月更文挑战第30天】新框架Octo-planner提升端侧AI代理效率与准确性至97%。此框架由Nexa AI等机构合作研发,采用&quot;Planner-Action&quot;模式,将AI代理任务划分为规划与执行两部分,利用&quot;Octopus&quot;及&quot;Phi-3 Mini&quot;模型分别处理。通过fine-tuning技术及GPT-4辅助,实现在资源受限设备上的高性能。更多细节见论文: https://arxiv.org/pdf/2406.18082
229 1
WordArt Designer:基于用户驱动与大语言模型的艺术字生成
本文介绍了一个基于用户驱动,依赖于大型语言模型(LLMs)的艺术字生成框架WordArt Designer。
|
算法 测试技术 开发工具
[软件工程导论(第六版)]第1章 软件工程学概述(复习笔记)
[软件工程导论(第六版)]第1章 软件工程学概述(复习笔记)
|
文字识别 API 网络安全
一文带你看透手机号码归属地
手机号码归属地对企业与个人在生产与生活中起到了重要的作用,那么查询手机号码归属地的接口就是必不可少的了。APISpace上的手机号码归属地API就可以很好的满足手机号码归属地查询的需求。
2171 1
|
存储 人工智能 大数据
中国中医科学院与阿里云达成合作
中国中医科学院与阿里云达成合作
424 0

热门文章

最新文章