题意:

给定一个多边形,这个多边形的点都在格点上,问你这个多边形里面包含了几个格点。

题解:

对于格点多边形有一个非常有趣的定理:

多边形的面积S,内部的格点数a和边界上的格点数b,满足如下结论:

2S=2a+b-2

证明不难,对于格点长方形显然成立,对于高度为1的直角三角形也显然成立,那么我们想象,把两个满足皮克定理的多边形,沿着它们的一个平行与格线的边拼起来,假设拼的这个边长度为k,这两个图形原来在这里各有k个边界格点,拼起来之后,这2k个边界格点,变成了2个边界格点,和k-2个内部格点,神奇吧!它们的面积还是符合皮克定理, 任何图形都可以用长方形和高为1的直角三角形这样拼起来,因此定理得证。

边界格点数用gcd求,面积用叉乘求。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int maxn=1e5+;
int n;
pll p[maxn];
inline ll gcd(ll m,ll n){return n?gcd(n,m%n):m;}
int main()
{
cin>>n;
for(int i=;i<n;i++) scanf("%lld%lld",&p[i].first,&p[i].second);
ll S2=, b=;
for(int i=;i<n;i++)
{
S2+=p[i].first*p[(i+)%n].second-p[i].second*p[(i+)%n].first;
b+=gcd(abs(p[i].first-p[(i+)%n].first),abs(p[i].second-p[(i+)%n].second));
}
cout<<(abs(S2)-b+)/<<endl;
}

最新文章

  1. 关于 bind 你可能需要了解的知识点以及使用场景
  2. WCF错误:413 Request Entity Too Large
  3. CG&amp;CAD resource
  4. (1)WinForm和WebForm
  5. bzoj4578: [Usaco2016 OPen]Splitting the Field
  6. Mysql 中bitwise对效率的影响??
  7. jmeter初识
  8. handsontable的核心方法
  9. Fragment 设置主题
  10. ASP.NET速度优化
  11. 本地phpstudy开发中apache可以用,nginx不可用,
  12. 修改Weblogic jdk版本
  13. python与mongodb的交互 增删改差
  14. linux系统做raid
  15. 钉钉消息通知机器人python版
  16. C语言之指针变量
  17. docker——数据管理
  18. .net 枚举(Enum)使用总结
  19. 【java基础】java集合之HashTable,HashSet,HashMap
  20. 两种 js下载文件的步骤

热门文章

  1. 使用JMeter进行http压力测试
  2. tomcat访问控制及站点部署
  3. 谷歌浏览器控制台出现 Unchecked runtime.lastError: The message port closed before a response was received. 的报错
  4. leetcode-158周赛-5224-掷筛子模拟
  5. 【JZOJ6409】困难的图论
  6. __new__构造方法
  7. __str__方法
  8. Download ubuntu Linux
  9. ElasticSearch再学习
  10. csp-s模拟测试93