模版
skajre
这个作者很懒,什么都没留下…
展开
-
51nod 动态规划基础
矩阵取数问题#include#includeusing namespace std;const int MAXN=500+5;typedef long long LL;LL a[MAXN][MAXN];void dp(int i,int j){ if(i==1&&j==1) a[i][j]=a[i][j]; else if(i==1) a[i][j]=a[i][j原创 2016-07-11 21:01:39 · 267 阅读 · 0 评论 -
高精度模版(大数相加 相乘 相除)
#include#include#include#includeusing namespace std;string operator + (string s1,string s2)//大数相加{ if(s1.size()<s2.size()) { string temp=s1; s1=s2; s2=temp; }原创 2016-09-05 21:32:09 · 222 阅读 · 0 评论 -
浮点数的n次方
string remove_later(string s)//去除后导0{ bool ok=false; for(int i=(int)s.size()-1;i>=0;i--) { if(s[i]=='0') s.erase(i); else if(s[i]=='.'){ s.erase(i)原创 2016-09-05 21:33:25 · 1480 阅读 · 0 评论 -
离散数学:矩阵
根据离散数学:一个由0,1构成的矩阵A,任意常数k,A^k次表示矩阵中任意点经过k条路径到任意点的的方法数,点可以重复走。这是一个很重要的图论知识,POJ2888就有运用到。#include#include#includeusing namespace std;int u,v;const int mod=9973;struct Matrix{ int Mat[15][1原创 2016-08-04 18:10:04 · 3650 阅读 · 0 评论 -
POJ 1001 Exponentiation(浮点数的n次方)
//// main.cpp// Richard//// Created by 邵金杰 on 16/9/6.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#includeusing namespace std;string operator * (string s,i原创 2016-09-07 08:08:24 · 347 阅读 · 0 评论 -
比较字典序的模版函数
#includeusing namespace std;templatebool LexicograghicallySmaller(vector a,vector b){ int n=a.size(); int m=b.size(); int i; for(i=0;i<n&&i<m;i++) { if(a[i]<b[i]) retur原创 2016-09-30 08:22:40 · 570 阅读 · 0 评论 -
点集配对问题(状压dp)
d[s]为集合s配对后的最小距离和,dp[s]=min(dp[s],dp[s-{i}-{j}]+|pipj|)。//// main.cpp// Richard//// Created by 邵金杰 on 16/10/1.// Mail:1016427040@qq.com or jasonshaosjj@gmail.com// Copyright © 2016年 邵金杰. Al原创 2016-10-01 16:17:34 · 498 阅读 · 0 评论 -
计数排序
#includeusing namespace std;int a[10],b[10],c[10];int main(){ for(int i=0;i>a[i]; for(int i=0;i<10;i++){ for(int j=i+1;j<10;j++){ if(a[i]>a[j]) c[i]++; else原创 2016-10-27 09:50:56 · 157 阅读 · 0 评论 -
LIS O(nlogn) (lower_bound实现)
//// main.cpp// Richard//// Created by 邵金杰 on 16/10/2.// Mail:1016427040@qq.com or jasonshaosjj@gmail.com// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#incl原创 2016-10-02 19:05:50 · 593 阅读 · 0 评论 -
LCS最大公共子序列O(nlogn)算法
最长公共子序列问题:给定2个字符串,求其最长公共子串。如abcde和dbada的最长公共字串为bd。动态规划:dp[i][j]表示A串前i个和B串前j个的最长公共子串的长度。则若A[i] == B[j] , dp[i][j] = dp[i-1][j-1] + 1;否则 dp[i][j] = max(dp[i-1][j],dp[i][j-1]);时间复杂度O(N*M)。d原创 2016-09-16 11:39:37 · 351 阅读 · 0 评论 -
枚举子集
#includeusing namespace std;int main(){ int s=(1<<4)-1; for(int i=s;i;i=(i-1)&s) { for(int j=0;j<4;j++) { if(i&(1<<j)) cout<<j+1<<" "; } cout原创 2016-10-08 15:10:50 · 189 阅读 · 0 评论 -
高精度
const int maxLen = 1005;struct BigInt{//not support negative long long num[maxLen]; int digit = 0; BigInt() = default; BigInt(char a[]){ int la = strlen(a); int i = l原创 2016-09-16 12:00:45 · 180 阅读 · 0 评论 -
POJ 1474 Video Surveillance
这题方法非常巧妙,让我认识到了半平面的另一种用法。方法是沿逆时针方向,把每条边抖遍历一遍去切割这个多边形,如果最后切割有公共区域,那么就说明该区域可以看到所有的边,如果没有,则不行。至于代码,只需要写个主函数,其他模版直接上就可以了。//// main.cpp// Richard//// Created by 邵金杰 on 16/8/10.// Copyright ©原创 2016-08-10 09:19:13 · 175 阅读 · 0 评论 -
51nod 动态规划入门
最大子矩阵和#include#include#include#includeusing namespace std;const int maxn=500+10;int f[maxn],c[maxn][maxn],d[maxn];int main(){ int m,n,ans=0,sum=0,b=0; scanf("%d%d",&m,&n); for(int原创 2016-07-11 21:05:17 · 295 阅读 · 0 评论 -
欧几里德算法扩展
#include#include#include#include#includeusing namespace std;void gcd(int a,int b,int &d,int &x,int &y){ if(!b) {d=a;x=1;y=0;} else {gcd(b,a%b,d,y,x);y-=x*(a/b);}}int main(){ int原创 2016-07-15 09:42:07 · 163 阅读 · 0 评论 -
同余和模运算
(a+b)modn=(amond+bmodn)modn;(a-b)modn=(amodn-bmodn+n)modn;abmodn=((almond)(bmodn))modn;在乘法中(almond)(bmodn)可能会溢出,所以要用long long 来保存;如:int mul_mod(int a,int b,int n){ a=a%n;b=b%n; return (int)((原创 2016-07-15 18:54:15 · 673 阅读 · 0 评论 -
大整数取模
#include#include#include#includeusing namespace std;int main(){ char s[105]; int m,len,ans=0; scanf("%s%d",s,&m); len=(int)strlen(s); for(int i=0;i<len;i++) ans=(int)原创 2016-07-15 19:07:02 · 420 阅读 · 0 评论 -
快速幂
int Pow(int a,int b){ if(b==0) return 1; if(b&1) return a*Pow(a,b-1); else {int t=Pow(a,b/2);return t*t;}}int Pow(int a,int b){ int base=a; int result=1; while(b){原创 2016-07-28 18:56:37 · 143 阅读 · 0 评论 -
快速幂取模
//快速幂取模int Pow(int a,int b,int c){ int result=1; int base=a%c; while(b) { if(b&1) result=(result*base)%c; base=(base*base)%c; b=(b>>1); } return resul原创 2016-07-28 19:01:25 · 205 阅读 · 0 评论 -
等比数列二分求模
//等比数列二分求模int PowMod(int a,int b,int c){ int result=1; int base=a%c; while(b) { if(b&1) result=(result*base)%c; base=(base*base)%c; b=(b>>1); } return原创 2016-07-28 19:13:16 · 379 阅读 · 0 评论 -
最佳加法表达式
有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少?思路:设定dp[i][j],i表示为加号的个数,j表示到达数组的第#include#include#include#includeusing namespace std;const int maxn=1000+10;char s[maxn];int原创 2016-07-18 20:36:04 · 617 阅读 · 1 评论 -
暴力polya模版
LL polya(LL m,LL n){ LL result=0; for(int i=1;i<=n;i++) result+=Pow(m,gcd(n,i)); if(n%2) result+=Pow(m,(n+1)/2)*n; else result+=(Pow(m,n/2)+Pow(m,n/2+1))*n/2;原创 2016-08-03 16:09:41 · 204 阅读 · 0 评论 -
半平面交
这模版真累啊//// main.cpp// Richard//// Created by 邵金杰 on 16/8/9.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#include#includeusing namespace std;#define EPS 1原创 2016-08-09 20:35:42 · 284 阅读 · 0 评论 -
求两圆相交的面积
转自博客:http://blog.sina.com.cn/s/blog_850498e20100w6fq.html假设半径小的圆为c1,半径大的圆为c2。c1的半径r1,圆心坐标(x1,y1)。c2的半径r2,圆心坐标(x2,y2)。d为两圆圆心连线的长度。相交面积为Sd=sqrt((x1-x2)^2+(y1-y2)^2)(1)如果r1+r2那么两圆相离,相交面积S转载 2016-11-26 13:02:36 · 941 阅读 · 0 评论