__builtin_popcount() 求二进制 1的个数。
 double add(double a,double b) {
 if(abs(a+b)<eps *(abs(a)+abs(b))) return 0;
 return a+b;
 }
 一个 向量操作结构体。
 const double eps =1e-8;
 struct P {
 double x,y;
 P() {}
 P(double x,double y):x(x),y(y) {}
 P operator + (P p) {
 return P(add(x,p.x),add(y,p.y));
 }
 P operator - (P p) {
 return P(add(x,-p.x),add(y,-p.y));
 }
 P operator  (double d) {
 return P(xd,yd);
 }
 double dot (P p) { //向量积
 return add(xp.x,yp.y);
 }
 double det(P p) { //数量积
 return add(xp.y,-y*p.x);
 }
 };
 double Distance(P a,P b)
 {
 return sqrt((a.x-b.x)(a.x-b.x)+(a.y-b.y)(a.y-b.y));
 }
 double InterArea(P a,double R,P b,double r)
 {
 if(R
 return 0;
 if(dis<=R-r) //两圆内含,相交面积为小圆的面积
 return PIrr;
 //两圆相交时
 double angle1=acos((RR+disdis-rr)/(2.0Rdis)); //大圆的那个角
 double angle2=acos((rr+disdis-RR)/(2.0rdis)); //小圆的那个角
 double s=Rangle1R+rangle2r;
 s-=Rdissin(angle1);
 return s;
 }
- 全排列 一定要排序 #include
using namespace std;
typedef long long ll;
const int maxn=4e5+5;
int n[maxn];
int dp[maxn][9];
int main() {
int ans[9]= {0,1,2,3,4,5,6,7,8};
int k=0;
do {
for(int i=0; i<9; i++) {
dp[k][i]=ans[i];
}
k++;
} while(next_permutation(ans,ans+9));
return 0;
} 
hypot() 求三角斜边