02 2016 档案
摘要:以下是三种高精度算术的模版: 高精度加法: string s="0123456789",s1,s2; int ss1[1005],ss2[1005],len; void dashu(string s1,int ss1[]) { for(int i=s1.length()-1;i>=0;i--) { for(int j=0;jlen2) len=l...
阅读全文
摘要:(~ ̄▽ ̄)~* 找规律 //初始化为B[i]=A[i] //然后由V=|A[1]-B[1]|+|A[2]-B[2|+|A[3]-B[3]| // +|B[1]-B[2]|+|B[2]-B[3]| //可以知道,如果要V尽可能小,那么对于B[2]的取值, //则要求B[2]到A[2] B[1] B[3]的距离尽可能小, //在数轴上可以看出,只要B[2]=中位数(A[2],B[1],...
阅读全文
摘要:(~ ̄▽ ̄)~* 水 //水题;潜力^e为正数(e为2时都可以)的儿子都可以去上战场了, //英文要看懂,exponent指数,不超过3的正数 #include #include #include #include using namespace std; int main() { int n,e,son[105]; while(~scanf("%d",&n)) { ...
阅读全文
摘要:(~ ̄▽ ̄)~* 这道题涉及高精度除法,模板如下: char s[1005]; char division[1005];//存储进行高精度除法的数据 bool bignum_div(int x) { int tot=0,num=0; for(int i=0;s[i];i++) { num=num*10+s[i]-'0'; division...
阅读全文
摘要:(~ ̄▽ ̄)~* //C跟着a君骑,然后更快的b君来了,C又跟着b君骑, //接着最快的d君来了,C就去跟着d君了, //最后最快的d君到达目的地时,C也就到了 //所以C的到达时间,就是最早到达的那个人的到达时间 //tips:但是,ti为负数者,速度又快的话,那C是永远追不上的 //所以结果应该是ti为正,即在C后才出发,的最快者所用时 #include #include #include #...
阅读全文
摘要:(~ ̄▽ ̄)~* #include #include #include #include using namespace std; int main() { int n; double w[105]; while(~scanf("%d",&n)) { for(int i=0;i0;i--) { w[i-1]=...
阅读全文
摘要:(~ ̄▽ ̄)~* #include #include #include #include using namespace std; struct node { double l,r; //找到以岛为圆心,以d为半径的圆与坐标x轴的左交点l、右交点r //雷达只有设在l~r之间,岛才在雷达覆盖范围内 }a[1005]; int cmp(node a,node b) { ...
阅读全文
摘要:(~ ̄▽ ̄)~* 画格子 #include #include #include #include using namespace std; int main() { int res,n,m; int a,b,c,d,e,f; int cc[]={0,5,3,1};//{0,6,4,2}WA,画个6*6的格子模拟一下就知道了 while(scanf("%d%d%d%...
阅读全文
摘要:题目链接 代码借鉴此博:http://www.cnblogs.com/vongang/archive/2011/08/19/2146070.html 其中关于max{c[fa]/t[fa]}贪心原则,此博有很好的解释:http://www.cnblogs.com/rainydays/p/3271277.html 在此引用其中几段话: 试想,如果没有父节点排在节点之前的限制,那么这个题目非常简单,...
阅读全文
摘要:(●'◡'●)
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int INF=10e8; const int MAXN=410; int k,minn; int lc...
阅读全文
摘要:(~ ̄▽ ̄)~* //把最大单独放,然后第二大的和最小的放一起,第三大的和第二小的放一起 //由此类推,求最大值,即为盒的最小值 #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; c...
阅读全文
摘要:(~ ̄▽ ̄)~* #include #include #include using namespace std; const int MAXN=100005; char s[MAXN]; int main() { int n; scanf("%d",&n); scanf("%s",s);//输入01串 int origin=1,flip=0; for(i...
阅读全文
摘要:(~ ̄▽ ̄)~* //求一个集合,这个集合与任意一个区间的交集,需至少有两个数字 //贪心过程:按n个区间的最右值从小到大对区间进行排列, //集合首先取第一个区间的最右两个数字, //到第二个区间,判断集合里的数有没有在区间里 //没有的话,就从第二个区间的最右开始往左取(cnt=0取最后两个数,cnt=1取最后一个数) #include #include #include #include #...
阅读全文
摘要:(~ ̄▽ ̄)~* //既然是求最少能胜几次 //说明对方是要尽可能让我输 //但为了避免浪费,对方会用比我的牌大的牌中的最小pip的牌来击败我 #include #include #include #include using namespace std; int main() { int Cas=0; int m,n,pip[1010],vis[1010]; while...
阅读全文
摘要:(~ ̄▽ ̄)~* (注意下面代码中关于iterator的用法,此代码借鉴某大牛) #include #include #include #include using namespace std; struct Wall { int row;//表示墙在哪行 int left; int right; }; int col[105];//保存每列的墙数 vector wal...
阅读全文
摘要:(~ ̄▽ ̄)~* 这道题用到了cstdlib库的qsort()函数: 用法链接:http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html #include #include #include #include #include using namespace std; struct stick { int l,...
阅读全文
摘要:(~ ̄▽ ̄)~* #include #include #include using namespace std; const int N=30; int n,h,H;//H:记录原本有多少小时的时间;h:贪心的时候,防止H被修改 int res[N],RES[N];//res[]:贪心的时候保存结果;RES[]:用于记录最终结果 int maxn,sum;//maxn:保存最终结果,即捕到的鱼最...
阅读全文
摘要:( ̄▽ ̄)" //无向二分图的最小路径覆盖数=顶点总数-最大匹配数/2(最大匹配数=最小点覆盖数) //这里最大匹配数需要除以2,因为每两个相邻的*连一条边,即和是一样的,所以结果多了一倍 #include #include #include #include #include using namespace std; const int MAXN=405; int uN; char G[MAX...
阅读全文
摘要:( ̄▽ ̄)" //凡无向图,求匹配时都要除以2 #include #include #include #include #include using namespace std; const int MAXN=1505; int uN; vector g[MAXN]; int link[MAXN]; bool vis[MAXN]; bool DFS(int u) { for(int i...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include using namespace std; const int MAXN=505; int uN; //二分图左边的点集 vector g[MAXN]; //存储矩阵数据 int link[MAXN]; //记录右边的点v在左边的点集uN中所匹配的点x的编号 bool vis[...
阅读全文
摘要:http://blog.sina.com.cn/s/blog_691ce2b701016reh.html
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include using namespace std; const int INF=10e8; const int MAXN=55; int col,row,k,minn; char str[MAXN][MAXN]; int maze[MAXN][MAXN],dist[MAXN*2][MA...
阅读全文
摘要:( ̄▽ ̄)" //求最短总路径中的最大边长,Prim还需要一个Max变量 #include #include #include #include #include #include using namespace std; const int MAXN=510; const int INF=10e8; int k,minn; int c[MAXN][MAXN],lc[MAXN]; bool vi...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include using namespace std; const int MAXN=2010; const int INF=10e8; int n,k,minn; char str[MAXN][10]; int c[MAXN][MAXN],lc[MAXN]; bool vis[MAXN]...
阅读全文
摘要:( ̄▽ ̄)" //判环:当入度为0的顶点==0时,则有环(inconsistency) //判序:当入度为0的顶点仅为1时,则能得到有序的拓扑排序,否则无序 //边输入边判断,用continue来做到:得出结果后,对后续的输入不作处理 #include #include #include #include #include using namespace std; const int MAXN=...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include using namespace std; const int INF=10e8; const int MAXN=1010; int k,minn; int cost[MAXN][MAXN],lowcost[MAXN],lc[MAXN]; bool vis[MAXN]; void Rever...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include using namespace std; const int INF=10e7; const int MAXN=510; int f,n,m,w,s,e,t; int lc[MAXN],cntNode[MAXN]; bool vis[MAXN]; struct edge {...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include #include #include using namespace std; const int MAXN=40; int n,m; double Vcur[MAXN],R[MAXN][MAXN]; bool vis[MAXN]; int cntNode[MAXN]; cha...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include #include using namespace std; const int eps=1e-7; const int MAXN=110; int N,M,S; double V,Vcur[MAXN],R[MAXN][MAXN],C[MAXN][MAXN]; bool vis...
阅读全文
摘要:( ̄▽ ̄)" 第一种解题方法:dij变形 //无向图最短路,dij的变形(有点像prim) //题意:从起点1到终点n,找出一条路,该条路的最小负重是最大的 #include #include #include #include #include #include #include #include #include #include using namespace std; typedef lo...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include #include using namespace std; const int INF=30; //infÓÃ15£¬10e8¶¼wa£¬ÓÃ20£¬30²Åac const int MAXN=110; int lc[MAXN][MAXN]; void floyd_out...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include using namespace std; const int INF=10e8; const int MAXN=110; int k,minn; int c[MAXN][MAXN],lc[MAXN],level[MAXN],X[MAXN]; bool vis[MAXN]; int dij(int n) { ...
阅读全文
摘要:( ̄▽ ̄)" //这道题WA的惨烈,又跪在n,m同时为0输入结束这个点上 //以后用n+m或者n||m,不要再用n&&m判了 #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int MAXN=100010;...
阅读全文
摘要:( ̄▽ ̄)" //不知道为什么,用scanf输入char数组的话,字符获取失效 //于是改用cin>>string,就可以了 //这题字符的处理比较麻烦,输入之后转成数字,用到函数get(char),get_num(string,int) //最后字符的输出是反向输出的,用到函数get_char(int) //这道题也算是到无向图输出欧拉路的模板题,判有无欧拉路用到函数ok() #include ...
阅读全文
摘要:( ̄▽ ̄)" //这题对序号输出有要求,较小的序号优先输出,所以用到优先队列 //优先队列是优先弹出值最大的,所以最后要反向输出结果,才是正确的output #include #include #include #include #include #include #include #include #include using namespace std; typedef long long l...
阅读全文
摘要:( ̄▽ ̄)" #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int INF=10e7; const int MAXN=110; int cost[MAXN][MAXN]; int lowcost[MAXN...
阅读全文
摘要:( ̄▽ ̄)" #include #include using namespace std; int fa[30010]; void makeSet(int n) //初始化,n个元素,处于单独集合 { for(int i=0;i<n;i++) fa[i]=i; } int findSet(int x) //找到该点的粑粑 { return fa[x]=fa[x]...
阅读全文
摘要:( ̄▽ ̄)" //dijkstra算法, //只是有效边(即能从i楼到j楼)的边权都为1(代表次数1); //关于能否到达目标楼层b,只需判断最终lowtime[b]是否等于INF即可。 #include #include using namespace std; const int INF=10e7; const int MAXN=210; int k,minn; int K[MAXN]; in...
阅读全文
摘要:( ̄▽ ̄)" //求每条通路中的最大跳跃距离(即最大的两点间距)中的最小值(所谓minimax), //即为frog distance, //且青蛙跳到任意点, //因此用的是稍作改变的folyd算法, //folyd算法用于求解任意两点之间的最短路; #include #include #include #include using namespace std; double lowcost[2...
阅读全文
摘要:( ̄▽ ̄)" //dijkstra算法; //这题建邻接矩阵的时候有坑(先读入边后读入点),还有重边; #include #include using namespace std; const int INF=10e7; const int MAXN=2010; int k,minn; int cost[MAXN][MAXN]; int lowcost[MAXN]; bool vis[MAXN];...
阅读全文
摘要:( ̄▽ ̄)" #include #include using namespace std; const int INF=10e7; const int MAXN=1010; int k,minn; int cost[MAXN][MAXN]; int lowcost[MAXN]; bool vis[MAXN]; void dij(int n,int start) { for(int i=1...
阅读全文
摘要:当mod一个大数p的时候,还有进行乘法的时候可能会爆long long的时候,就用快速乘或者快速幂。 参考:http://www.cnblogs.com/whywhy/p/5066730.html 先上模板: 快速乘: ll multi(ll a,ll b,ll m) { ll ans=0; while(b) { if(b&1) (ans+=a) %= m...
阅读全文
摘要:参考资料:http://blog.csdn.net/lezg_bkbj/article/details/11538359 上面的资料,把强连通讲的很好很清楚,值得学习。 在一个有向图G中,若两顶点间至少存在一条路径(即a能到b,b也能到a),则称两个顶点强连通;如果该有向图G中任意两顶点都强连通,则称G为强连通图;在一个非强连通图中,若有子图是强连通图,则称该子图为强连通分量。 有向图强连...
阅读全文
摘要:欧拉路的相关概念: 1.能从无向图中的一个顶点出发,并走出一条道路,每条边恰好经过一次,这样的路线就叫做欧拉路; 2.找欧拉路首先要判断是否存在欧拉路: 一个无向图存在欧拉路当且仅当该图是连通的,且有且只有0或2个点的度数是奇数,为2时这两个点只能作为欧拉路径的起点和终点(0个时称为欧拉回路)。 3.确定存在欧拉路之后,开始构造欧拉路: 欧拉路参考:http://blog.csdn.net...
阅读全文
摘要:【需要解决的问题】 对一个有向无环图(DAG)拓扑排序。 拓扑排序就是,对图上的点进行排序,使得排在后面的点不能通过一条路径到前面的点。 比如下面这个图: 其中一个拓扑排序是1,2,3,4,5;而1,2,5,3,4就不行,因为3能到达5。 因此可以得出: 用一个队列实现,先把入度为0的点放入队列,每
阅读全文
摘要:先来说说什么是树。 树实际上是图的一种,当一个有N个点的无向连通图,只有N-1条边时,就是一棵树,即树中不会有环出现;所以对于一个图,删除某些环中的某条边,使得该图成为一棵树,那么这棵树就称为生成树。 而最小生成树的意思就是,给定有n个顶点的带权图G(E,V),找到一棵生成树,求该生成树的边权和。 Kruskal算法: 算法步骤: 1.构造一个有n个顶点的无边子图; ...
阅读全文
摘要:在学习最小生成树的两种算法前,先学下并查集。 并查集的思想是,对于一个集合,使用集合中的一个顶点作为特殊点,集合里所有的点都与此特殊点直接相连;而并查集的查询,就相当于查询两个两个顶点是否为同一个父亲,这也是findSet(x)里之所以有fa[x]==x时,fa[x]=x的原因。 并查集之查询、合并 模板如下: int fa[30010]; void makeSet(i...
阅读全文
摘要:先说前三种,主要解决的问题是:“求a点到b点的最短路”,解决方法是:用以下三种算法中的一种,求出a点到其他所有点的最短路,即可知道a点到b点的最短路。 前三种最短路算法是:Dijkstra(及优先队列优化),Bellman-Ford,SPFA(实际上就是BF的优化版)。 Dijkstra算法: (要求边权只能大于等于0) 未优化 O(N2): 贪心...
阅读全文
摘要:【概念】疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图。 Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵。 邻接矩阵: 开一个二维数组graph[ ][ ]来记录图中点a与点b之间是否连通,初始化为0(或者-1之类的看情况);如果图中有可忽略的重边(如 只需重边中的最小边或最大边),则保存需要的那条边的边权,但如果有无法忽略的重边,就一...
阅读全文
摘要:DFS和BFS在图中的应用: 图连通性判定;路径的存在性;图中是否存在环;求图的最小生成树;求图的关键路径;求图的拓扑排序。 DFS:简单的说,先一直往深处走,直到不能再深了,再从另一条路开始往深处走,直到所有路都走完; struct node { int next; //E[i].next指向图中
阅读全文

浙公网安备 33010602011771号