算法模板
戈谣
不曾阅尽千帆,谈何归来不变
展开
-
快速幂取模算法模板-x^y%mode=?
思路非常简洁的一个算法,这里只给出算法模板,建议读者阅读前详细了解快速幂算法。//写在前面//很简单的一个算法 #include <iostream>#define LL long longusing namespace std;LL Fast_power(LL x,LL y,LL mode){ LL sum=1; while(y) { if(y&1...原创 2018-12-12 19:27:24 · 480 阅读 · 0 评论 -
高精度除法(精确到小数点后N位)
这种类型的高精度除法颇为简单,直接贴上代码//写在前面//对于精确到小数点后任意位数的高精度除法//只要简单的模拟除法过程就可//在直接用除法算出小数点前的整数后//改变被除数 a=(a%b)*10 a为被除数,b为除数 #include <iostream>using namespace std;int main(){ int num1,num2;cin>...原创 2019-01-21 20:50:13 · 4059 阅读 · 2 评论 -
扩展欧几里得求(ax+by=m) 算法模板
这里只给出算法的模板,建议读者阅读代码前先详细了解扩展欧几里得算法和欧几里得算法//写在前面 //要求: ax+by=m 有解 必须有 m%(gcd(a,b))=0;//当符合条件时有: a1=a/gcd(a,b) b1=b/gcd(a,b) m=m/gcd(a,b);//有方程 a1*x+b1*y=m1 有解 此时有gcd(a1,b1)=1;//有方程 a1*x1+b1*y1=1;...原创 2018-12-11 21:17:42 · 827 阅读 · 2 评论 -
判断两条线段是否相交-UVA-191(跨立实验,快速判断实验)
有关判断两条直线相交的详细介绍这里不做说明,仅给出代码模板,其中以UVA-191作为模板测试样例,题目链接如下https://vjudge.net/problem/UVA-191//写在前面//判断两条线段是否相交需要进行两个实验,分别是://快速判断实验,跨立实验两个实验缺一不可//跨立实验能排除两条直线在同一条直线上但没有公共点这种特殊情况//跨立实验利用叉积来进行判断,叉积...原创 2018-12-22 21:01:37 · 586 阅读 · 0 评论 -
判断点是否在多边形内部(射线法)
有关射线法的详细介绍在这里给出一个讲的很好的博客链接:https://blog.csdn.net/jq_develop/article/details/44981127接着给出代码模板,以UVA-634作为模板测试,题目链接如下:https://vjudge.net/problem/UVA-634//写在前面//判断点是否在多边形内部最好的方法就是射线法,在实际//应用中有几...原创 2018-12-22 19:50:27 · 1072 阅读 · 0 评论 -
任意多边形的面积计算(叉积)
有关多边形面积计算的详细理论这里不做介绍,仅给出代码模板,并以HDU-2036作为样例https://vjudge.net/problem/HDU-2036//写在前面//求任意多边形的面积可以将多边形划分为n个三角形//然后利用叉积公式求每个三角形的面积并将所有三角形面积累加起来即可//有三角形的面积叉积计算公式:已知三角形的三个顶点//(x1,y1),(x2,y2),(x3,...原创 2018-12-21 19:42:00 · 1184 阅读 · 0 评论 -
欧拉函数的三种求法
1、求给定的某个数的欧拉函数://写在前面//有公式phi(n)=n*(1-(1/p1))(1-(1/p2)).....//其中p1,p2,..为n的质因数 #include <iostream>using namespace std;int euler(int n){ int res=n,mid=n; for(int i=2;i*i<=mid;i++) ...原创 2018-12-16 17:27:24 · 4124 阅读 · 1 评论 -
扩展欧几里得算法求逆元
//写在前面//当有ax=1(mod n)---1 时,x称做a的乘法逆元//一个数有逆元的充分必要条件是gcd(a,n)=1// 1式等价于 ax+ny=1 ---2//2式可用扩展欧几里得算法求出x0的值//其中最小逆元 x=(x0%n+n)%n //求出逆元后 (a/b)%n=(a*inv(a))%n 其中a*inv(a)=1(mod n) #include <iost...原创 2018-12-16 15:44:36 · 1465 阅读 · 0 评论 -
最长公共子序列
poj-1458作为样例。题目链接如下https://vjudge.net/problem/POJ-1458//写在前面//最长公共子序列:即给定两个字符序列要你找到两者中最长的公共子序列//状态转移方程为:{0 i=0或j=0; // dp[i][j]={dp[i-1][j-1]+1 a[i]=b[j];// ...原创 2018-12-21 09:22:11 · 186 阅读 · 0 评论 -
最长上升子序列(路径打印)
//写在前面://给定一数字序列,找到其最长的上升子序列//状态转移方程为: if(arrary[j]>arrary[i])dp[j]=max(dp[j],dp[i]+1);//其中arrary[i]为数字序列中下标为i的值 #include <iostream>#include <string.h>#define maxn 1005using ...原创 2018-12-20 23:26:34 · 1113 阅读 · 0 评论 -
多重背包问题
HDU1059链接https://vjudge.net/problem/HDU-1059//写在前面//多重背包问题:有N种物品,第i种物品的体积为vc[i],价值为va[i],数量为c[i]//有一容量为C的背包,问怎样才能使背包中的物品价值最大//利用二进制优化将问题转化为01背包问题 //具体给出HDU上1059题作为样例 #include <iostream>...原创 2018-12-20 17:36:09 · 185 阅读 · 0 评论 -
完全背包问题(空间优化,打印路径)
//HDU1114//写在前面:这里给出HDU1114题作为样例//完全背包问题:有N种物品,每i种物品的体积为vc[i],价值为w[i],数量不限//有一容量为C的背包,问如何装能使背包的体积最大//当使用二维数组时的状态转移方程为:dp[i][v]=max(dp[i-1][v],dp[i][v-vc[i]]+w[i])//空间优化后的状态转移方程变为:dp[v]=max(...原创 2018-12-20 11:41:49 · 1051 阅读 · 2 评论 -
01背包问题(空间优化,路径打印)
//写在前面//01问题:有N个物品,每个物品都有其对应的体积和价值//有一个容量为V的背包问怎样放能使背包中物品的价值最大//状态转移方程为:f[i][v]=max(f[i-1][v],f[i-1][v-a[i]+b[i]) //当使用空间优化是状态转移方程为:f[v]=max(f[v],f[v-a[i]]+b[i]) #include <iostream>#in...原创 2018-12-20 08:46:49 · 685 阅读 · 0 评论 -
矩阵快速幂(斐波拉契数列)
首先附上题目链接:http://poj.org/problem?id=3070有关矩阵快速幂的基础知识可以参考这篇博客#include <iostream>#include <string.h> #define maxn 105#define mod 1234567#define LL long longusing namespace std;//定义...原创 2019-03-18 19:38:22 · 244 阅读 · 0 评论