Luogu P2735 电网【真·计算几何/Pick定理】By cellur925
題目傳送門(mén)
刷USACO偶然遇到的,可能是人生中第一道正兒八經(jīng)的計(jì)算幾何。
題目大意:在平面直角坐標(biāo)系中給你一個(gè)以格點(diǎn)為頂點(diǎn)的三角形,求三角形中的整點(diǎn)個(gè)數(shù)。
因?yàn)楸匦?和必修2的陰影很快就想到了數(shù)學(xué)中的線性規(guī)劃,求出兩條直線的方程,然后枚舉所有整點(diǎn)看是否滿(mǎn)足條件。結(jié)果莫名其妙的掛掉了,樣例過(guò)不了。
既然是計(jì)算幾何萌新,那就看一看題解吧。
正解是一個(gè)定理-Pick定理,內(nèi)容如下
“Pick定理是說(shuō),在一個(gè)平面直角坐標(biāo)系內(nèi),如果一個(gè)多邊形的頂點(diǎn)全都在格點(diǎn)上,那么這個(gè)圖形的面積恰好就等于邊界上經(jīng)過(guò)的格點(diǎn)數(shù)的一半加上內(nèi)部所含格點(diǎn)數(shù)再減一。”--Matrix67,侵刪。
于是我們就愉快地O(1)算出來(lái)了。
Code
1 #include<cmath> 2 #include<cstdio> 3 4 using namespace std; 5 6 int n,m,p,b,S,ans; 7 8 int gcd(int x,int y) 9 { 10 return y ? gcd(y , x%y) : x ; 11 } 12 13 int main() 14 { 15 scanf("%d%d%d",&n,&m,&p); 16 b=gcd(n,m)+gcd(fabs(n-p),m)+p; 17 S=(p*m)>>1;ans=S+1-(b>>1); 18 printf("%d",ans); 19 return 0; 20 } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/nopartyfoucaodong/p/9531098.html
總結(jié)
以上是生活随笔為你收集整理的Luogu P2735 电网【真·计算几何/Pick定理】By cellur925的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《学习opencv》笔记——矩阵和图像处
- 下一篇: 用户需求、己、竞争对手的关系