POJ1265:Area(多边形面积公式+pick公式) 好题
题目:http://poj.org/problem?id=1265
题意 : 给你一个点阵,上边有很多点连成的多边形,让你求多边形内部的点和边界上的点以及多边形的面积,要注意他每次给出的点并不是点的横纵坐标,而是相对于上一个点的横纵坐标离开的距离dx,dy,所以你还要求一下每个点的坐标,然后再进行别的操作就可以了
题目解析:
这个题用了很多知识点:
1、以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy),其中,dxdy分别为线段横向占的点数和纵向占的点数。如果dx或dy为0,则覆盖的点数为dy或dx。
2、Pick公式:平面上以格子点为顶点的简单多边形的面积=边上的点数/2+内部的点数+1。
3、任意一个多边形的面积等于按顺序求相邻两个点与原点组成的向量的叉积之和/2。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <queue>
#define inf 0x3f3f3f3f
#define eps 1e-9
typedef long long ll;
using namespace std;
struct point
{
int x,y;
} q[];
int n;
ll num,In;
double S;
int gcd(int A,int B)
{
return B==?A:gcd(B,A%B);
}
int Mult(point A,point B)
{
return A.x*B.y-B.x*A.y;
}
int main()
{
int T,xx,yy,sx,sy,dx,dy,K=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
sx=sy=;
S=;
num=;
for(int i=; i<=n; i++)
{
scanf("%d%d",&xx,&yy);
sx+=xx;
sy+=yy;
q[i].x=sx;
q[i].y=sy;
}
q[].x=q[n].x;
q[].y=q[n].y;
for(int i=; i<n; i++)
{
S+=Mult(q[i],q[i+]);
dx=abs(q[i].x-q[i+].x);
dy=abs(q[i].y-q[i+].y);
num+=gcd(max(dx,dy),min(dx,dy));
}
S=fabs(S/);//不确定S是否为正数
In=int(S)+-num/;
printf("Scenario #%d:\n",++K);
printf("%I64d %I64d %.1f\n\n",In,num,S);
}
return ;
}
代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <queue>
#define inf 0x3f3f3f3f
#define eps 1e-9
typedef long long ll;
using namespace std;
struct point
{
int x,y;
} q[];
int n;
ll num,In;
double S;
int gcd(int A,int B)
{
return B==?A:gcd(B,A%B);
}
int Mult(point A,point B)
{
return A.x*B.y-B.x*A.y;
}
int main()
{
int T,xx,yy,dx,dy,K=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
q[].x=;
q[].y=;
S=;
num=;
for(int i=; i<=n; i++)
{
scanf("%d%d",&xx,&yy);
q[i].x=q[i-].x+xx;
q[i].y=q[i-].y+yy;
}
for(int i=; i<n; i++)
{
S+=Mult(q[i],q[i+]);
dx=abs(q[i].x-q[i+].x);
dy=abs(q[i].y-q[i+].y);
num+=gcd(max(dx,dy),min(dx,dy));
}
S=fabs(S/);//不确定S是否为正数
In=int(S)+-num/;
printf("Scenario #%d:\n",++K);
printf("%I64d %I64d %.1f\n\n",In,num,S);
}
return ;
}
POJ1265:Area(多边形面积公式+pick公式) 好题的更多相关文章
- POJ1265 Area 多边形内格点数 Pick公式
POJ1265给定一个多边形 计算边上的格点 内部的格点 以及多边形的面积 利用Pick公式 面积=内部格点数+边上格点数/2-1 将多边形分割为三角形容易证得上述公式 计算面积用叉积,计算边上格点 ...
- poj 1654 Area 多边形面积
/* poj 1654 Area 多边形面积 题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> ...
- POJ 1654 Area 多边形面积 G++会WA
#include<stdio.h> #include<algorithm> #include <cstring> using namespace std; type ...
- POJ 1265 Area POJ 2954 Triangle Pick定理
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5227 Accepted: 2342 Description ...
- POJ1265——Area(Pick定理+多边形面积)
Area DescriptionBeing well known for its highly innovative products, Merck would definitely be a goo ...
- Area - POJ 1265(pick定理求格点数+求多边形面积)
题目大意:以原点为起点然后每次增加一个x,y的值,求出来最后在多边形边上的点有多少个,内部的点有多少个,多边形的面积是多少. 分析: 1.以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy),其 ...
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
题目:http://poj.org/problem?id=1265 Sample Input 2 4 1 0 0 1 -1 0 0 -1 7 5 0 1 3 -2 2 -1 0 0 -3 -3 1 0 ...
- POJ 1265 Area (Pick定理 & 多边形面积)
题目链接:POJ 1265 Problem Description Being well known for its highly innovative products, Merck would d ...
- poj 1654:Area 区域 ---- 叉积(求多边形面积)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19398 Accepted: 5311 利用叉积求多边形面 ...
随机推荐
- IoC是一个很大的概念,可以用不同的方式实现。其主要形式有两种:
IoC是一个很大的概念,可以用不同的方式实现.其主要形式有两种: ◇依赖查找:容器提供回调接口和上下文条件给组件.EJB和ApacheAvalon都使用这种方式.这样一来,组件就必须使用容器提供的AP ...
- 在J2EE的Web应用中,编译后的class文件存放的目录为(选择1项)
在J2EE的Web应用中,编译后的class文件存放的目录为(选择1项) A. classes目录 B. images目录 C. jar目录 D. 任意位置 解答:A
- 【wikioi】3160 最长公共子串(后缀自动机)
http://codevs.cn/problem/3160/ sam的裸题...(之前写了spoj上另一题sam的题目,但是spoj被卡评测现在还没评测完QAQ打算写那题题解时再来详细介绍sam的.. ...
- redis的使用和安装,redis基础和高级部分
redis的使用和安装,redis基础和高级部分 在后端开发中,为了提高性能,对于一些经常查询但是又不太变化的内容会使用redis,比如前端的列表展示项等,如果数据有变化也可以清空缓存,让前端查一次数 ...
- spring boot 启动数据库报错(Exception during pool initialization.)
2018-06-27 14:12:28.804 ERROR 14312 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariP ...
- 多线程下的神奇的IOCP
https://blog.csdn.net/lijia626482312/article/details/40858061 一个人从接到项目到昨天终于完成,用了差不多4个月,其中各种心酸和眼泪.我的项 ...
- POJ2139 Six Degrees of Cowvin Bacon [Floyd]
水题,随手敲过 一看就是最短路问题,a,b演同一场电影则他们的距离为1 默认全部两两原始距离无穷,到自身为0 输入全部数据处理后floyd 然后照它说的求平均分离度 再找最小的,×100取整输出 #i ...
- 获取本地的json并展示
我们知道在java中,有两种方式可以传输数据 1.json javaScript Object Notation 是以健值段的方式展示并显示数据的 2.xml 是以节点的方式展示并显示数据的 xml是 ...
- ios学习--结合UIImageView实现图片的移动和缩放
因为种种原因,需要在iphone应用中实现图片查看功能,由于iphone屏幕支持多点触摸,于是是想到用“手势”来实现图片的实时缩放和移动.借鉴无所不在的internet网络资料之后,终于实现此一功能, ...
- Http协议原理解析第一篇
一:http的由来: OSI模型把网络通信分成七层:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,对于开发网络应用人员来说,一般把网络分成五层,这样比较容易理解.这五层为:物理层.数据链 ...