__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() 求三角斜边