usaco 3.4 Electric Fence 皮克定理
2008-08-20 19:25
393 查看
一条直线((0,0),(n,m))上的格点数(包含端点)等于n与m的最大公约数+1
皮克定理: 面积A和内部格点数目i、边上格点数目b的关系:A = i + b/2 - 1
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
/*
PROG: fence9
LANG: C++
ID: heben991
*/
struct point
{
long long x,y;
};
long long Abs(long long x)
{
if(x<0)x=-x;
return x;
}
long long cross(point a, point b)
{
return a.x*b.y - a.y*b.x;
}
//多变形面积
long long area(point p[], int n = 3)
{
int i, j, k;
long long s, ss = 0;
for(i = 0; i < n; i++)
{
j = (i+1)%n;
s = cross(p[i],p[j]);
ss += s;
}
return Abs(ss)/2;
}
// a,b整点之间的整点个数,包含a,b
long long gcd(long long a, long long b)
{
while(a && b)
{
a%=b;
if(a) b%=a;
}
return a+b;
}
//一条直线((0,0),(n,m))上的格点数(包含端点)等于n与m的最大公约数+1
long long countgrid(point a, point b)
{
long long x = Abs(a.x-b.x), y = Abs(a.y-b.y);
return gcd(x,y);
}
//多变形内整点个数,不包含边界pku 2954 1256
//皮克定理: 面积A和内部格点数目i、
//边上格点数目b的关系:A = i + b/2 - 1
long long internal_grid(point p[], int n = 3)
{
long long a = area(p,n), in, b=0, t;
int i;
for(i = 0; i < n; i++)
{
t = countgrid(p[i], p[(i+1)%n]);
b += t;
}
in = a - b/2 + 1;
return in;
}
int main()
{
freopen("fence9.in", "r", stdin);
freopen("fence9.out","w",stdout);
point t[3] = {0};
cin >> t[1].x >> t[1].y >> t[2].x;
cout << internal_grid(t) << endl;
return 0;
}
皮克定理: 面积A和内部格点数目i、边上格点数目b的关系:A = i + b/2 - 1
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
/*
PROG: fence9
LANG: C++
ID: heben991
*/
struct point
{
long long x,y;
};
long long Abs(long long x)
{
if(x<0)x=-x;
return x;
}
long long cross(point a, point b)
{
return a.x*b.y - a.y*b.x;
}
//多变形面积
long long area(point p[], int n = 3)
{
int i, j, k;
long long s, ss = 0;
for(i = 0; i < n; i++)
{
j = (i+1)%n;
s = cross(p[i],p[j]);
ss += s;
}
return Abs(ss)/2;
}
// a,b整点之间的整点个数,包含a,b
long long gcd(long long a, long long b)
{
while(a && b)
{
a%=b;
if(a) b%=a;
}
return a+b;
}
//一条直线((0,0),(n,m))上的格点数(包含端点)等于n与m的最大公约数+1
long long countgrid(point a, point b)
{
long long x = Abs(a.x-b.x), y = Abs(a.y-b.y);
return gcd(x,y);
}
//多变形内整点个数,不包含边界pku 2954 1256
//皮克定理: 面积A和内部格点数目i、
//边上格点数目b的关系:A = i + b/2 - 1
long long internal_grid(point p[], int n = 3)
{
long long a = area(p,n), in, b=0, t;
int i;
for(i = 0; i < n; i++)
{
t = countgrid(p[i], p[(i+1)%n]);
b += t;
}
in = a - b/2 + 1;
return in;
}
int main()
{
freopen("fence9.in", "r", stdin);
freopen("fence9.out","w",stdout);
point t[3] = {0};
cin >> t[1].x >> t[1].y >> t[2].x;
cout << internal_grid(t) << endl;
return 0;
}
相关文章推荐
- USACO 3.4 Electric Fence(pick定理)
- Electric Fences_usaco3.4_皮克定理
- USACO 3.4 Electric Fence
- USACO 3.4 Electric Fence
- USACO 3.4 Electric Fence
- usaco 3.4 Electric Fence 2010.8.4
- USACO-Section 3.4 Electric Fence (模拟)
- USACO 3.4 American Heritage
- USACO section 3.4 American Heritage(二叉树序列)
- USACO 3.4 Electric Fence (fence9)
- USACO 3.4 American Heritage
- usaco3.4 fence4从一点看多边形,输出能看到的边
- USACO Section 3.4 Raucous Rockers(状态压缩或DFS)
- USACO-Section 3.4 Raucous Rockers (DP)
- USACO-Section3.4 Electric Fences【数学】
- USACO section 3.4 American Heritage(二叉树序列)
- USACO Section 3.4 Electric Fence(数论)
- USACO 3.4 A Game
- USACO 3.4 American Heritage
- USACO 3.4 Raucous Rockers(DP)