匹克定理pick
与POJ1226为例
要知道在一个格点多边形内 知道期内部的点数 Q,边上的点数L,就可以知道他的面积pick定理及 S=Q+L/2-1;
然后 还有边上的点数除了多边形的顶点外,还有一些点该怎么求呢,嘎嘎,记得之前欧几里得吗?两个点的差值,及X轴的差值和Y轴的差值,然后很自然的想到了最大公约数为什么最大公约数就是经过的整格点的个数呢? 当时我是这么想的,当X与Y增长相同的时候,他们的经过的整格点数无疑是X个,当其中一个n倍数式的增加的时候同样,因为之前的1:1的增长现在只不过变成了1:n罢了.那当两个同时增长的时候分别增长n,和m倍.的时候只不过比变成了n:m罢了嘎嘎现在应该明白了好了
#include <iostream>
#include<cstdio>
#include<string.h>
#include<cmath>
using namespace std;
struct point
{
double x,y;
point (double a=0,double b=0){x=a;y=b;}
};
struct point p[105];
double cross(point a,point b)
{
return a.x*b.y-a.y*b.x;
}
double work(int n)
{
int i;
double sum=0;
for(i=0;i<n;i++)
sum+=cross(p[i],p[(i+1)%n]);
return sum/2;
}
int gcd(int a,int b)
{
int t;
if(a<b)
{
t=a;a=b;b=t;
}
if(b==0)return a;
else return gcd(b,a%b);
}
int main()
{
int t,n,i;
int x,y,k;
double sum;
int num1,num2;
scanf("%d",&t);
k=0;
while(t--)
{
num2=0;
scanf("%d",&n);
p[0]=point(0,0);
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
p[i].x=p[i-1].x+x;
p[i].y=p[i-1].y+y;
x=x>0?x:-x;
y=y>0?y:-y;
num2+=gcd(x,y);
}
sum=work(n);
num1=(2*sum+2-num2)/2;
printf("Scenario #%d:\n",++k);
printf("%d %d %.1lf\n\n",num1,num2,sum);
}
return 0;
}
匹克定理pick的更多相关文章
- POJ 2954 Triangle (pick 定理)
题目大意:给出三个点的坐标,问在这三个点坐标里面的整数坐标点有多少个(不包含边上的) 匹克定理:I = (A-E) / 2 + 1; A: 表示多边形面积 I : 表示多边形内部的点的个数 E: 表示 ...
- Luogu P2735 电网【真·计算几何/Pick定理】By cellur925
题目传送门 刷USACO偶然遇到的,可能是人生中第一道正儿八经的计算几何. 题目大意:在平面直角坐标系中给你一个以格点为顶点的三角形,求三角形中的整点个数. 因为必修5和必修2的阴影很快就想到了数学中 ...
- POJ 1265 Area (Pick定理 & 多边形面积)
题目链接:POJ 1265 Problem Description Being well known for its highly innovative products, Merck would d ...
- 洛谷 P2735 电网
https://www.luogu.org/problemnew/show/P2735 定理什么的最讨厌了,匹克定理?不会,也不想学. 粉色的为电网,将图中的电网我们将他构造一个矩形,然后蓝色和绿色的 ...
- HDU 3775 Chain Code ——(Pick定理)
Pick定理运用在整点围城的面积,有以下公式:S围 = S内(线内部的整点个数)+ S线(线上整点的个数)/2 - 1.在这题上,我们可以用叉乘计算S围,题意要求的答案应该是S内+S线.那么我们进行推 ...
- 【POJ】2954 Triangle(pick定理)
http://poj.org/problem?id=2954 表示我交了20+次... 为什么呢?因为多组数据我是这样判断的:da=sum{a[i].x+a[i].y},然后!da就表示没有数据了QA ...
- UVa 10088 - Trees on My Island (pick定理)
样例: 输入:123 16 39 28 49 69 98 96 55 84 43 51 3121000 10002000 10004000 20006000 10008000 30008000 800 ...
- Area(Pick定理POJ1256)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5429 Accepted: 2436 Description ...
- poj 2954 Triangle(Pick定理)
链接:http://poj.org/problem?id=2954 Triangle Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...
随机推荐
- for,for-each,for-in,for-of,map的比较
参考: 全面解析JavaScript里的循环方法之forEach,for-in,for-of Iterator 和 for...of 循环 JavaScript Array 对象 常规for for循 ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
- 吐槽win8
想吐槽win8好久了!今天终于忍不住,得喷一下以泻心头之愤. 文件拷贝动辄失败!? 但凡是我从远程往本地拷大程序,此时文件系统变得奇慢无比,而且本地也不能打开大文件或者往外拷贝,否则一不小心就出现拷贝 ...
- linux定时任务cron配置说明
实现linux定时任务有:cron.anacron.at,使用最多的是cron任务 名词解释 cron--服务名:crond--linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 ...
- Spark2 Dataset持久化存储级别StorageLevel
import org.apache.spark.storage.StorageLevel // 数据持久缓存到内存中//data.cache()data.persist() // 设置缓存级别data ...
- Windows运行python脚本文件
开始学习python就是听说这个语言写脚本文件特别方便,简单使用.学了一段时间,但是直到现在我才直到直到怎么在Windows的cmd上运行脚本文件. 之前一直都是在pycharm上运行,并不实用. 百 ...
- inline-blcok 之间的空白间隙
前言: inline-blcok 布局时,通常情况下, inline-blocks 之间有空白,尽管通常我们是不想要的,毕竟不像padding或者margin一样好控制,如图: <div cla ...
- php代码不支持多维数组,注释和没有缓存功能。
php代码:simplet.class.php<?phpclass SimpleT {private $t_vars;private $templates_dir;private $templa ...
- opengl学习笔记(四):openCV读入图片,openGL实现纹理贴图
在opengl中实现三维物体的纹理贴图的第一步就是要读入图片,然后指定该图片为纹理图片. 首先利用opencv的cvLoadImage函数把图像读入到内存中 img = cvLoadImage(); ...
- 使用 Python 进行 socket 编程
本文主要参考 https://docs.python.org/3/howto/sockets.html . 本文只讨论 STREAME(比如 TCP) INET(比如 IPv4) socket. 在多 ...