usaco Electric Fence

来源:互联网 发布:网络直播营销方案 编辑:程序博客网 时间:2024/05/22 04:36

一开始枚举点,交一次发现少判断一种情况最后实在没有耐心了去百度了原来还有这么个东西

皮克定理 

皮克定理说明了其面积S和内部格点数目a、边上格点数目b的关系:S = a + b/2 - 1。

根据三角形面积公式求出S。

如果知道了b,那么三角形内部格点数目a也就求出来了。

可以证明,一条直线((0,0),(n,m))上的格点数等于n与m的最大公约数+1。即b=gcd(n,m)+1. gcd(n,m)为n与m的最大公约数。(这个很好证明m/n一写再约去一个最大公约数后你就活发现了),+1是0,0端点。

/*ID:jinbo wuTASK: fence9LANG:C++*/#include<bits/stdc++.h>using namespace std;int gcd(int a,int b){if(b==0)return a;else return gcd(b,a%b);}int main(){freopen("fence9.in","r",stdin);freopen("fence9.out","w",stdout);int n,m,p;cin>>n>>m>>p;int s,a,b;b=0;b+=gcd(n,m);//不加一很明显三个端点三条直线一个端电上有两条直线。b+=gcd(abs(p-n),m);//把p,0那点看作(0,0)点又是。b+=p;s=(p*m)/2;a=s-b/2+1;cout<<a<<endl;}


0 0
原创粉丝点击