算法分享
cnyali
这个作者很懒,什么都没留下…
展开
-
HDU1285拓扑排序模板题
#include<bits/stdc++.h>using namespace std;const int maxn=510;int rd[maxn],ans[maxn];vector<int> a[maxn];priority_queue<int ,vector<int>,greater<int> > q;int main(){ int n,m; while(cin>>n>>m){ for(int i=1原创 2022-05-02 16:27:29 · 452 阅读 · 0 评论 -
POJ2418字典树
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1000010;struct node{int p,ch[130];}a[maxn];int cnt=1,sum=0;char t[35];void out(int rt,int L){ for(int i=0;i<=129;i++){ int u=a[rt].ch[i];原创 2022-04-12 21:14:47 · 470 阅读 · 0 评论 -
字典树POJ2001
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=100010;struct node{ int p,ch[30],count; }a[maxn];int cnt,n;char tmp[maxn][30];int main(){ cnt=1; n=0; while(gets(tmp[++n])){ if(!tmp[n][0]原创 2022-04-10 21:39:08 · 432 阅读 · 0 评论 -
字典树poj2503
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1000010;struct node{ int p,ch[30]; char t[15];}a[maxn];int cnt,n,T;char s1[15],s2[15],tmp[30];int main(){ cnt=1; while(gets(tmp)){ if(!t原创 2022-04-10 19:55:29 · 601 阅读 · 0 评论 -
POJ3630 字典树
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=100010;struct node{int p,ch[30];}a[maxn];int cnt,n,T;int main(){ char x[25]; cin>>T; while(T--){ cnt=0; memset(a,0,sizeof(a)); int f原创 2022-04-10 16:02:38 · 404 阅读 · 0 评论 -
SPLAY的各种操作
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;const int maxn=100010;struct node{ int v,s,fz,f,ch[2]; //ch[0]:left;ch[1]:right;}a[maxn];int root=1,t[maxn];void push_up(int rt){ int原创 2022-04-05 21:52:52 · 507 阅读 · 0 评论 -
splay poj1442
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;const int maxn=100010;struct node{ int v,s,f,ch[2]; //ch[0]:left;ch[1]:right;}a[maxn];int root=1,t[maxn];void push_up(int rt){ int l=原创 2022-04-05 19:55:59 · 118 阅读 · 0 评论 -
SPLAY 排序模板
#include<bits/stdc++.h>using namespace std;const int maxn=100010;struct node{ int v,s,f,ch[2]; //ch[0]:left;ch[1]:right;}a[maxn];int root=1;void out(int rt){ if(rt){out(a[rt].ch[0]); printf("%d ",a[rt].v); out(a[rt].ch[1]);}}void rotate(i原创 2022-04-03 20:50:16 · 409 阅读 · 0 评论 -
POJ1442 TREAP名次树
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;const int maxn=30010;struct node{ int v,w,s; node *fa,*l,*r; node(){s=1;w=rand();fa=l=r=NULL;}};node *root;int a[maxn];int js(node原创 2022-03-29 19:58:42 · 332 阅读 · 0 评论 -
POJ 2763树剖+线段树+树状数组
代码分享原创 2022-03-20 20:00:07 · 328 阅读 · 1 评论 -
归纳策略——求前n个自然数的平方之和
求前n个自然数的平方之和: S=12+22+32+……+n2原创 2014-08-23 15:52:08 · 1277 阅读 · 1 评论 -
nlogn 最长不下降子序列
O(nlogn)的算法关键是它建立了一个数组temp[],temp[i]表示长度为i的不下降序列中结尾元素的最小值,用top表示数组目前的长度,算法完成后top的值即为最长不下降子序列的长度。设当前的以求出的长度为top,则判断num[i]和temp[top]:1.如果num[i]>=temp[top],即num[i]大于长度为top的序列中的最后一个元素,这样就可以使序列的长度增加1,即转载 2014-09-14 11:15:59 · 554 阅读 · 0 评论 -
信息学竞赛中的各种低级错误,持续更新中~~~,各位同学来跟帖!!
1、写错文件名,包括程序文件名,输入输出wen2、原创 2014-11-11 17:51:21 · 5751 阅读 · 33 评论 -
欧几里得算法及扩展欧几里得算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r原创 2014-11-04 18:42:12 · 569 阅读 · 0 评论 -
noip2014普及组题解
1. 珠心算测验【问题描述】珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?最近老师出了一些测原创 2014-11-11 01:45:33 · 5884 阅读 · 1 评论 -
NOIP2014提高组DAY1题解
1.生活大爆炸版石头剪刀布【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。蜥蜴人:《星际迷航》中的反面角色。这五种手势的胜负关系如表一所示,表中列出的是甲对乙原创 2014-11-11 22:22:53 · 1389 阅读 · 0 评论 -
NOIP2014day1T2联合权值新版题解(优化的邻接表)
之前的解题报告无法过全部数据,因邻接表没有优化,统计权值方式也太暴力,做以下修改1、建邻接表时加一个数组来记录每个节点的尾指针位置2、统计每个点周围所有点权值最大的两个点3、利用x1*y1+x1*y2+x1*y3....=x1*(y1+y2+y3+...)进行简单优化加速程序如下,完爆官方所有数据:#include#includeconst int maxn=200010,原创 2014-12-01 00:46:28 · 2403 阅读 · 0 评论 -
好用的链式前向星
对于已经的一个图,我们存储它的方式有很多种,其中常用的有1、邻接矩阵(建图简单,使用简单,但是遍历图时间复杂度太大)2、邻接表(建图较复杂,对于特殊的米字图时间复杂度太大)3、优化的邻接表,在我前面一片文章里有介绍,就是为每一个节点保存一个LAST数组(最后的点编号),可以极大提高建图速度http://blog.csdn.net/cnyali/article/details/416原创 2014-12-01 11:18:47 · 2097 阅读 · 2 评论 -
信息学竞赛刷题建议历程
1、近10年NOIP普及组前三题——30道题练入门2、USACO全体——练基础算法3、近10年NOIP提高组全部试题——感受OI基础3.1、刘汝佳白书训练指南所有例题——打好基础4、开始SGU版切刷题——不管苦难与否直接扫荡过,这个过程一直伴随你到全国赛,最好题量破300~~5、HNOI近10年试题——感受省队难度6、WC,NOI近10年试题——感受国内金牌怎么修炼成的原创 2014-12-03 00:38:32 · 4721 阅读 · 3 评论 -
POJ2387 Til the Cows Come Home -DIJKSTRA 练习
题目大意是:有N个牛棚和T条边相连,每条边有个权值,问1号到N号牛棚之间的最短距离本题是又是DIJKSTRA最短路水题,注意任何两个牛棚之间可能有多条路相连,输入时先输入边,再输入点,程序如下:#include#include#includeconst int maxn=1010,maxint=1000000000;int a[maxn][maxn],d[maxn],p[maxn]原创 2014-12-09 00:13:14 · 711 阅读 · 0 评论 -
POJ1502 MPI Maelstrom -DIJKSTRA练习系列
本题的大意是有N个处理器,任何两个处理器之间的传输信息是需要时间的,有的处理器之间不能传输信息,给出一个处理器传输信息时间的二维矩阵的下三角,X表示不能传输,问从第一个处理器传输到所有处理器所需要的总时间。本地是典型的DIJKSTRA水题,注意输入时需要用字符串输入,程序如下:#include#include#includeconst int maxn=110,maxint=100000原创 2014-12-08 23:59:42 · 804 阅读 · 0 评论 -
结构体指针实现插入排序和解决约瑟夫环问题
//用指针实现插入排序#include#includestruct node{ int data; struct node *next;};int main(){ int i,j,k,m,n,x; struct node *h,*p,*q; scanf("%d",&n); scanf("%d",&x原创 2015-02-04 11:35:26 · 1159 阅读 · 0 评论 -
POJ2502 Subway -DIJKSTRA最短路练习
题目大意:有个小朋友要从家里到学校,可以通过走路或者乘地铁的方式到达,走路每小时10KM,乘地铁每小时40KM,他可以走路+换乘地铁等多种方式到达,给出家,地铁站和学校的坐标,请问他到达学校的最短时间是多少分钟(四舍五入),假设没有等待地铁时间。题解:本题是一道要转换模型的最短路题,要将距离转化成时间,将家,每个地铁站,学校转换成点,最后求家到学校的最短时间,需要注意的是,地铁线不是直的,譬如原创 2014-12-10 16:18:45 · 794 阅读 · 0 评论 -
POJ2253 Frogger -DIJKSTRA || FLOYD最短路练习
题目大意:池塘里有N片荷叶,给出每片荷叶的坐标,青蛙要从X号荷叶跳到Y号荷叶,问单步最少要跳多少才能到达。题解:这道题可以采取类FLOYD的方法,要从X跳到Y,当越来越多的荷叶做为中间点来跳的时候,显然有可能单步跳的距离更短。程序如下:#include#include#includeconst int maxn=210;struct point{int x,y;}p[maxn];原创 2014-12-10 17:02:53 · 923 阅读 · 0 评论 -
高精度加法减法乘法除法
//高精度加法#include#include#includeint a[1000],b[1000],c[1000];char s[1000];int main(){ int i,j,k,m,n; int alen,blen,clen; gets(s); alen=strlen(s); for(i=alen-1;i>=0;i--) a[alen-i]=s[i]-'0'原创 2015-02-03 12:00:33 · 3136 阅读 · 0 评论 -
POJ 3259 Wormholes 链式前向星+SPFA练习
题目大意:给出一个无向图,再给出W个虫洞,虫洞的意思就是权值为负的边,问你可否找到负权环题解:SPFA中,如果每个点进队列超过N次,就可以判断有负全环。#include#include#include#includeconst int maxn=510,inf=1000000000;int e,to[maxn*12],next[maxn*12],begin[maxn],w[max原创 2014-12-14 15:27:23 · 729 阅读 · 0 评论 -
NOIP2014DAY2T2
#include#includeconst int maxn=10010,maxm=200010;int e,to[maxm],next[maxm],begin[maxn];int e1,to1[maxm],next1[maxm],begin1[maxn];int p[maxn],pd[maxn],px[maxn];int q[maxn],d[maxn];void add(int x原创 2014-12-02 21:21:27 · 731 阅读 · 0 评论 -
线段树计算线段填色
#include#includestruct node{ int s,t,c; struct node *l,*r;};struct node *h;int m,n;int c_sum[100010];void create_tree(struct node *x){ int mid; struct node *p,*q; if(x->t-x->s<=1)return;原创 2015-02-06 11:45:42 · 618 阅读 · 0 评论 -
最小生成树之PRIM算法
#include#includeconst int maxn=110,inf=1000000000;int a[maxn][maxn],d[maxn],p[maxn];int main(){ int i,j,k,m,n,ans;while(scanf("%d",&n)!=EOF){ ans=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a原创 2015-03-31 20:53:46 · 579 阅读 · 0 评论 -
POJ2349最小生成树
#include#include#includeconst int maxn=510;const double inf=1000000000.0;double a[maxn][maxn],d[maxn],e[maxn];int x[maxn],y[maxn],p[maxn];int main(){ int i,j,k,m,n,T,v=-1,u; double tmp,min;原创 2015-03-31 20:56:25 · 674 阅读 · 0 评论 -
LCA之TARJAN算法
#include#includeconst int maxn=1000;int e,to[maxn],next[maxn],begin[maxn];int e1,to1[maxn*10],next1[maxn*10],begin1[maxn];int p[maxn],fa[maxn],t[maxn];int find(int x){ if(fa[x]!=x) fa[x]=fin原创 2015-03-31 20:57:52 · 561 阅读 · 0 评论 -
POJ2031 最小生成树
#include#include#includeconst int maxn=110;const float inf=1000000000.0;int p[maxn];float a[maxn][maxn],d[maxn],x[maxn],y[maxn],z[maxn],r[maxn];int main(){ int i,j,k,m,n; float ans; while(1原创 2015-03-31 20:56:30 · 526 阅读 · 0 评论 -
字符串HASH模板
/* 从b串中寻找和a串长度相同的子串,返回开始位置 不保证绝对正确,发生冲突概率为O(sqrt(n)), n为哈希函数的最大值 */ #include#include#include#define ull unsigned long long const ull B = 1e8+7; const int MAXN = 5010; char转载 2015-08-09 01:15:00 · 1360 阅读 · 0 评论 -
BFS模版程序
#include#include#includestruct node{ int x,y,s;};struct node a[10000+10];int map[101][101],p[101][101],d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};int main(){ int i,j,k,m,n; int f,l,u,v; scanf("%d%原创 2015-08-07 15:23:04 · 849 阅读 · 0 评论 -
POJ2503 字符串HASH
#include#include#include#define ull unsigned long longconst ull p = 1e8+7;const int mod=100003;int e,to[mod],next[mod],begin[mod]; char a[mod][12],b[mod][12]; int hashx(char *s){ int len=strl原创 2015-08-09 03:09:11 · 543 阅读 · 0 评论 -
POJ3461 字符串HASH
#include#include#include#define ull unsigned long long const ull B = 1e8+7; const int MAXN = 10010; char a[MAXN],b[MAXN*100]; int ans;int find(){ int al=strlen(a),bl=strlen(b);原创 2015-08-09 12:38:01 · 732 阅读 · 0 评论 -
POJ2774 字符串HASH
#include#include#include#define ull unsigned long longconst ull B=100000007;const int maxn=100000+100,mod=100003;char a[maxn],b[maxn],tmp[maxn];int alen,blen;int e,begin[maxn],next[maxn*2];ul原创 2015-08-10 00:33:43 · 841 阅读 · 0 评论 -
BST 插入删除查找遍历
/*-------------------输入:566 99 33 22 11333 5 11输出11 22 33 66 99111 22 66 99011 22 66 99011 22 66 99任务是输入N个数,建立一颗BST二叉搜索树,查找删除其中的一些元素,再中序遍历如果找到了,删除并返回1,如果没找到,返回0;-------------------*/原创 2015-08-10 17:30:39 · 446 阅读 · 0 评论 -
图的深搜与广搜
#include#include#includeint a[100][100],p[100];int d[100],n;void dfs(int x){ int i,j,k; p[x]=1; printf("%d ",x); for(i=1;i<=n;i++) if(a[x][i] && !p[i]) dfs(i);}int main(){ int i,j,k,k原创 2015-08-12 17:28:06 · 781 阅读 · 0 评论 -
拓扑排序之NOIP2003神经网络
#include#include#includeconst int maxn=110;int c[maxn],u[maxn],a[maxn][maxn],w[maxn][maxn],rd[maxn],cd[maxn],q[maxn],p[maxn],pd[maxn];int main(){ freopen("network.in","r",stdin); freopen("netwo原创 2015-08-13 17:13:26 · 636 阅读 · 0 评论