我們猜測如果出現相鄰的兩個r(注意第乙個和最後乙個是r也算),那麼就一定不合法。同時,乙個合法的序列還要能夠組成直角多邊形。
假設序列有x個l,y個r
90x+270y=180(n-2)且x+y=n
解得x=n/2+2,y=n/2-2
所以n為奇數是gg的,n為偶數時l與r的個數是確定的。
討論三種情況:
1、第乙個是l最後乙個是r
2、第乙個是r最後乙個是l
3、第乙個和最後乙個都是l
第一、二種都可以考慮放了y個r,然後在r與r中間插入l,每個空至少插乙個l,最前面或最後面也是乙個空,答案為2c
y−1x
−1第三種就是多了乙個空,答案為cy
x−1
於是計算即可。
當然,想過要打高精度,而且還應該用fft加速高精度乘法,這裡只提供70分**
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
using
namespace
std;
typedef
long
long ll;
int pri[5000+10],f[5000+10],a[5000+10];
bool bz[5000+10];
int i,j,k,l,t,n,m,x,y,top;
ll ans;
ll c(int n,int m)
}fo(i,1,m)
}fo(i,1,n-m)
}ll t=1;
fo(i,1,5000)
while (a[i])
return t;
}void prepare()
f[i*pri[j]]=pri[j];}}
}int main()
}
求任意多邊形面積(凹多邊形和凸多邊形)
遇到問題 已知多邊形的各個左邊點,要求多邊形的面積 然後我搜尋了下看到這篇文章 這個人說的不多,但是簡單明瞭 首先已知各定點的座標分別為 x1,y1 x2,y2 x3,y3 xn,yn 則該多邊形的面積公式為 s 1 2 x1 y2 x2 y1 x2 y3 x3 y2 xk yk 1 xk 1 yk...
驗證多邊形是否為凸多邊形
驗證多邊形是否為凸多邊形 2108 shape of hdu include define debug 0 int crossmulti int x0,int y0,int x1,int y1,int x2,int y2 int main int n,i int f x,f y 第1個點 int s...
多邊形面積
點積 a b x1 x2 y1 y2 a b cos 點積的結果是乙個數值 叉積 a b x1 y2 x2 y1 a b sin 叉積的結果也是乙個向量,是垂直於向量a,b所形成的平面,如果看成三維座標的話是在 z 軸上,上面結果是它的模。三角形的面積 向量a和 向量b的叉積的絕對值表示 以 向量a...