
常用算法模板
Nature_Ran
这个作者很懒,什么都没留下…
展开
-
快速排序模板
对数据的快速排序(由大到小)int comp(const void *a,const void *b){ return *(int *)a就可以了}qsort(b,100,sizeof(b[0]),comp);对结构体的一级排序(由大到小)struct cat { int f,j; double p; }a[1005];int comp(const v原创 2018-01-22 09:10:13 · 172 阅读 · 0 评论 -
数论中的常用算法模板
辗转相除法(欧几里得)求a,b的最大公约数int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}线性筛选法找出素数#define N 100005using namespace std;int cnt,p[N];//p素组中记录了每一个素数bool tag[N];//tag标记i是否为素数,true为素数,初始化时都为truevoid get_prime(原创 2018-01-22 09:10:42 · 305 阅读 · 0 评论 -
判断线段相交
//叉积 double mult(node1 a, node1 b, node1 c) { return 1.0*(a.x-c.x)*(b.y-c.y)-1.0*(b.x-c.x)*(a.y-c.y); } //aa, bb为一条线段两端点 cc, dd为另一条线段的两端点 相交返回true, 不相交返回false bool judge(node1 aa, node1 bb原创 2018-01-22 09:11:00 · 209 阅读 · 0 评论 -
最长公共子序列(LCS)
#define M 500char str1[M],str2[M];int len1,len2;//分别为str1和str2的长度int dp[M][M];int LCS(){ int i,j; for(i=0;i { for(j=0;j { if(str1[i]==str2[j]) dp[i+1][j+1]=dp[i][j]+1; else dp[i+1][j+1]=max(dp[i原创 2018-01-22 09:11:08 · 167 阅读 · 0 评论 -
三点坐标确定圆心坐标
struct Point{ double x,y; friend Point operator - (Point a,Point b) //重载友元运算符 { Point temp; temp.x = a.x - b.x; temp.y = a.y - b.y; return temp; }};Point get_pc原创 2018-01-22 09:11:17 · 14214 阅读 · 0 评论 -
关于优先队列的方法
#include struct node{ int l,r,num;}soda[100005];bool operator if(a.r==b.r) return a.l>b.l; else return a.r>b.r;}priority_queueq;这种优先队列的定义方法只能重载 号,有点奇怪。还有一种定义法能重载 > 运算符,太麻烦就不写了,有这一个就够用了。另外,优先队列没有对对头的原创 2018-01-22 09:12:23 · 378 阅读 · 0 评论