poj 1265&&poj 2954(Pick定理)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 5811 | Accepted: 2589 |
Description

Figure 1: Example area.
You are hired to write a program that calculates the area occupied
by the new facility from the movements of a robot along its walls. You
can assume that this area is a polygon with corners on a rectangular
grid. However, your boss insists that you use a formula he is so proud
to have found somewhere. The formula relates the number I of grid points
inside the polygon, the number E of grid points on the edges, and the
total area A of the polygon. Unfortunately, you have lost the sheet on
which he had written down that simple formula for you, so your first
task is to find the formula yourself.
Input
For each scenario, you are given the number m, 3 <= m < 100,
of movements of the robot in the first line. The following m lines
contain pairs 揹x dy�of integers, separated by a single blank, satisfying
.-100 <= dx, dy <= 100 and (dx, dy) != (0, 0). Such a pair means
that the robot moves on to a grid point dx units to the right and dy
units upwards on the grid (with respect to the current position). You
can assume that the curve along which the robot moves is closed and that
it does not intersect or even touch itself except for the start and end
points. The robot moves anti-clockwise around the building, so the area
to be calculated lies to the left of the curve. It is known in advance
that the whole polygon would fit into a square on the grid with a side
length of 100 units.
Output
output for every scenario begins with a line containing 揝cenario #i:�
where i is the number of the scenario starting at 1. Then print a single
line containing I, E, and A, the area A rounded to one digit after the
decimal point. Separate the three numbers by two single blanks.
Terminate the output for the scenario with a blank line.
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 -3
Sample Output
Scenario #1:
0 4 1.0 Scenario #2:
12 16 19.0 题意:一个多边形从某个点出发(假设从0,0出发),每次有一个增量(dx,dy)!=(0,0) 经过n次之后又回到了原点
组成了一个简单多边形.问此时多边形内部的整点的数量,多边形边上的整点的数量,多边形的面积. Pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b/2-1,其中a表示多边形内部的整点数,b表示
多边形边界上的整点数,s表示多边形的面积。(ps:整点是x,y坐标都是整数)
每条边上的格点数(顶点只算终点) = gcd(abs(x2-x1),abs(y2-y1))
///题意:一个多边形从某个点出发(假设从0,0出发),每次有一个增量(dx,dy)!=(0,0) 经过n次之后又回到了原点
///组成了一个简单多边形.问此时多边形内部的整点的数量,多边形边上的整点的数量,多边形的面积.
///Pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b/2-1,其中a表示多边形内部的整点数,b表示
///多边形边界上的整点数,s表示多边形的面积。(ps:整点是x,y坐标都是整数)
///每条边上的格点数 = gcd(abs(x2-x1),abs(y2-y1))
#include <iostream>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
const int N =;
struct Point {
int x,y;
}p[N];
int gcd(int a,int b){
return b==?a:gcd(b,a%b);
}
int cross(Point a,Point b,Point c){
return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
int main()
{
int tcase;
scanf("%d",&tcase);
int k = ;
while(tcase--){
int n;
scanf("%d",&n);
p[].x = ,p[].y = ;
int On=,In=;
double area=;
for(int i=;i<=n;i++){
int dx,dy;
scanf("%d%d",&dx,&dy);
p[i].x= p[i-].x+dx;
p[i].y=p[i-].y+dy;
On+=gcd(abs(dx),abs(dy));
}
for(int i=;i<n-;i++){
area+=cross(p[i],p[i+],p[])/2.0;
}
In = (int)(area+-On/);
printf("Scenario #%d:\n%d %d %.1lf\n\n",k++,In,On,area);
}
return ;
}
poj 2954
http://acm.pku.edu.cn/JudgeOnline/problem?id=2954
///题意:完全包含在三角形内的整点有多少
#include <iostream>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
struct Point {
int x,y;
}p1,p2,p3;
int gcd(int a,int b){
return b==?a:gcd(b,a%b);
}
int cross(Point a,Point b,Point c){
return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
int main()
{
while(scanf("%d%d%d%d%d%d",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y)!=EOF){
if(p1.x==&&p1.y==&&p2.x==&&p2.y==&&p3.x==&&p3.y==) break;
double area = fabs(cross(p2,p3,p1)/2.0); int On = gcd(abs(p2.x-p1.x),abs(p2.y-p1.y))+gcd(abs(p3.x-p2.x),abs(p3.y-p2.y))+gcd(abs(p3.x-p1.x),abs(p3.y-p1.y));
printf("%d\n",(int)(area+-On/));
}
return ;
}
poj 1265&&poj 2954(Pick定理)的更多相关文章
- poj 1265 Area(Pick定理)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5666 Accepted: 2533 Description ...
- POJ 1265 Area (pick定理)
题目大意:已知机器人行走步数及每一步的坐标变化量,求机器人所走路径围成的多边形的面积.多边形边上和内部的点的数量. 思路:叉积求面积,pick定理求点. pick定理:面积=内部点数+边上点数/2-1 ...
- POJ 1265 Area POJ 2954 Triangle Pick定理
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5227 Accepted: 2342 Description ...
- 【POJ】2954 Triangle(pick定理)
http://poj.org/problem?id=2954 表示我交了20+次... 为什么呢?因为多组数据我是这样判断的:da=sum{a[i].x+a[i].y},然后!da就表示没有数据了QA ...
- poj 2954 Triangle(Pick定理)
链接:http://poj.org/problem?id=2954 Triangle Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...
- poj 1265 Area (Pick定理+求面积)
链接:http://poj.org/problem?id=1265 Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- POJ 1265 Area (Pick定理 & 多边形面积)
题目链接:POJ 1265 Problem Description Being well known for its highly innovative products, Merck would d ...
- poj 1265 Area(pick定理)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4373 Accepted: 1983 Description Bein ...
- [poj 1265]Area[Pick定理][三角剖分]
题意: 给出机器人移动的向量, 计算包围区域的内部整点, 边上整点, 面积. 思路: 面积是用三角剖分, 边上整点与GCD有关, 内部整点套用Pick定理. S = I + E / 2 - 1 I 为 ...
随机推荐
- AD9 设置网络标号作用域
http://blog.sina.com.cn/s/blog_99c8ec600102uxul.html 1.版本:Altium Designer 10 2.原因:在进行多原理图设计时, 不同原理图之 ...
- Java-多线程与单例
最近在公司写需求时遇到了多线程与单例一同出现的情况. 这个时候想到的就是线程安全以及单例的定义了,虽然单例指的是在内存中它只有一份,但是并不是说就是线程安全的. 所以,我当时就到网上找了关于多线程下单 ...
- Linux查看程序端口占用
使用命令: 1.ps -aux | grep 80 2.使用命令:netstat –apn 查看所有的进程和端口使用情况.
- linux udp c/s
一.UDP C/S编程的步骤如下图所示 二.与TCP C/S通信的区别在于:服务端没有设置监听和等待连接的过程.客户端没有连接服务端的过程.基于UDP的通信时不可靠地,面向无连接的,发送的数据无法确切 ...
- 大中型 UGC 平台的反垃圾(anti-spam)工作
本文来自网易云社区 随着互联网技术的日渐发展,相继诞生了垂直社区.社交平台.短视频应用.网络直播等越来越多样的产品.但在内容爆炸式增长的同时,海量UGC中也夹杂着各种违规垃圾信息,包括垃圾广告.诈骗信 ...
- python中subprocess.Popen执行命令并持续获取返回值
先举一个Android查询连接设备的命令来看看Python中subprocess.Popen怎么样的写法.用到的命令为 adb devices. import subprocess order='ad ...
- sql的nvl()函数
一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的 ...
- (原)Unreal渲染模块 管线 - 着色器(1)
@author: 白袍小道 转载悄悄说明下 随缘查看,施主开心就好 说明: 本篇继续Unreal搬山部分的渲染模块的Shader部分, 主要牵扯模块RenderCore, ShaderCore, RH ...
- nodejs取参四种方法req.body,req.params,req.param,req.body
摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现. 获取 ...
- 膜拜膜拜c++
被一个virtual搞得脑袋疼了好几天,明天继续虚函数+虚继承混合,伤不起,伤不起