計蒜客 三角形內點
//計蒜客 三角形內點
//皮克定理
//2S=2a+b-2
//S爲多邊形面積,a爲多邊形內部整點個數,b爲多邊形邊上整點個數
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int x,int y)
{
if(x==0)
{
return y;
}
else if(x<y)
{
gcd(y%x,x);
}
else
{
gcd(x%y,y);
}
}
int solve(int x,int y)//求解斜邊上的整點個數,假設x爲底,y爲高
{ //若y/x*k爲整數,則(k,y/x*k)爲整點,即k*y整除x(k>0&&k<x)
int temp=gcd(x,y); //明顯的最小的k=gcd(x,y)
int x_y=x*y/temp; //整點個數就爲(x-1)*y/gcd(x,y),兩個端點不算
return (y*(x-1)/x_y);
}
int main()
{
int n,m,p;
cin>>n>>m>>p;
if(n>=0&&n<=p)//兩底角爲直角或銳角
{
if(n==0||n==p)//三個點組成一個直角三角形,算直角三角形內點,套公式
{
cout<<(p*m+2-(p+m+1+solve(p,m)))/2<<endl;
}
else//三角形可以拆成兩個直角三角形,算出兩個三角形內點和加上高除去兩端的整點數
{
cout<<((n*m+2-(n+m+1+solve(n,m)))/2+((p-n)*m+2-(p-n+m+1+solve(p-n,m)))/2+m-1)<<endl;
}
}
else//某一底角爲鈍角,將鈍角三角形補成直角三角形
{
int temp,x,y;//x爲補全後的底邊,y爲補上的三角形的底邊
if(n<0)
{
x=(-1)*n+p;
y=(-1)*n;
}
else
{
x=n;
y=n-p;
}
temp=(x*m+2-(x+m+1+solve(n,m)))/2;//求出補全的三角形的內點數
temp-=((y*m+2-(y+m+1+solve(y,m)))/2);//減去補上的三角形的內點數
temp-=solve(y,m);//減去補上三角形斜邊的整點數
cout<<temp<<endl;
}
return 0;
}
//皮克定理
//2S=2a+b-2
//S爲多邊形面積,a爲多邊形內部整點個數,b爲多邊形邊上整點個數
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int x,int y)
{
if(x==0)
{
return y;
}
else if(x<y)
{
gcd(y%x,x);
}
else
{
gcd(x%y,y);
}
}
int solve(int x,int y)//求解斜邊上的整點個數,假設x爲底,y爲高
{ //若y/x*k爲整數,則(k,y/x*k)爲整點,即k*y整除x(k>0&&k<x)
int temp=gcd(x,y); //明顯的最小的k=gcd(x,y)
int x_y=x*y/temp; //整點個數就爲(x-1)*y/gcd(x,y),兩個端點不算
return (y*(x-1)/x_y);
}
int main()
{
int n,m,p;
cin>>n>>m>>p;
if(n>=0&&n<=p)//兩底角爲直角或銳角
{
if(n==0||n==p)//三個點組成一個直角三角形,算直角三角形內點,套公式
{
cout<<(p*m+2-(p+m+1+solve(p,m)))/2<<endl;
}
else//三角形可以拆成兩個直角三角形,算出兩個三角形內點和加上高除去兩端的整點數
{
cout<<((n*m+2-(n+m+1+solve(n,m)))/2+((p-n)*m+2-(p-n+m+1+solve(p-n,m)))/2+m-1)<<endl;
}
}
else//某一底角爲鈍角,將鈍角三角形補成直角三角形
{
int temp,x,y;//x爲補全後的底邊,y爲補上的三角形的底邊
if(n<0)
{
x=(-1)*n+p;
y=(-1)*n;
}
else
{
x=n;
y=n-p;
}
temp=(x*m+2-(x+m+1+solve(n,m)))/2;//求出補全的三角形的內點數
temp-=((y*m+2-(y+m+1+solve(y,m)))/2);//減去補上的三角形的內點數
temp-=solve(y,m);//減去補上三角形斜邊的整點數
cout<<temp<<endl;
}
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.