ACM-ICPC 2016暑期特训1
文章平均质量分 78
XerxesSimon
折柳为笔..月光为笺..画下你月华般的容颜.. 烟染三月..提诗两行..刻下我如梦般的臆想..
展开
-
字符串匹配(KMP、Tire、Map)
KMPmapTire原创 2016-08-05 15:43:17 · 466 阅读 · 0 评论 -
NYOJ 191 && POJ 1012 Joseph(约瑟夫环问题)
链接:click here~~题意:假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 。现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1。现在要求,在踢掉第一个好人前,必需把所有的坏人踢掉,问,给定一个k,求满足这个要求的最小的m,现在希望你写一个程序,快速的帮助小珂,计算出来这个m。思路:我们来回想一下最基本的约瑟夫环问题,转载 2017-01-18 08:43:59 · 610 阅读 · 0 评论 -
并查集
并查集模板int finds(int x){ return fa[x]==x?x:fa[x]=finds(fa[x]);}bool bing(int x,int y){ int fx=finds(x); int fy=finds(y); if(fx==fy) return 0; fa[fy]=fx; return 1;}经典原创 2017-03-03 23:15:28 · 375 阅读 · 0 评论 -
区间操作(线段树、树状数组、懒人标记、RMQ算法)
懒人标记士兵杀敌(5)#includeusing namespace std;const int N=1e6+7;const int inf=0x3f3f3f3f;const int mod=10003;int tre[N];int main(){ int i,j,k,t,tt=0; int n,x,y; scanf("%d%d%d",&n,&x,&y原创 2016-08-05 15:39:46 · 765 阅读 · 0 评论 -
KMP
http://acm.hdu.edu.cn/showproblem.php?pid=1711#include"stdio.h" #include"string.h" #include"stdlib.h" int n,m; int next[10011]; int a[1000111]; int b[10011]; void getnext() {转载 2016-03-19 20:58:07 · 230 阅读 · 0 评论 -
最短路(SPFA、Dijkstra、Floyd、Bellman-Ford)
SPFA:求单源,时间复杂度O(kE)。(k定理: 只要最短路径存在,上述SPFA算法必定能求出最小值。int spfa_dfs(int u){ vis[u]=1; for(int k=f[u]; k!=0; k=e[k].next) { int v=e[k].v,w=e[k].w; if( d[u]+w < d[v] )原创 2016-07-08 18:00:26 · 740 阅读 · 2 评论 -
扩展欧几里德
P1009清帝之惑之康熙Accepted标签:浙江2000清帝之惑[显示标签]背景康熙是中国历史乃至世界历史中最伟大的帝王之一,清除螯拜,撤除三藩,统一台湾,平定准葛尔叛乱;与此同时,出众的他也被世界各国遣清使臣所折服。康熙是历史上少有的全人,不仅文武兼得,而且在各各方面都有见地,比如说航海、数学、英语、构图、建筑原创 2016-01-23 09:35:08 · 509 阅读 · 0 评论 -
最佳淘汰算法
4272: 最佳淘汰算法Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 412 Solved: 64DescriptionLyf在做操作系统作业的时候,遇到了一题要他实现下Opt算法(全称页面置换最佳淘汰算法)。可是Lyf发现最近好忙啊,于是他想请他的学弟,学妹们帮他来完成。作业里的内容是这样的:提出最佳页面淘汰算法原创 2017-03-29 08:57:33 · 5567 阅读 · 0 评论 -
概率/期望
http://blog.csdn.net/u014427196/article/details/46425645http://www.ifrog.net/acm/problem/1055题意:一个盒子一开始有n个球,每个球标号唯一,先执行操作1,如果两个球x,y满足|x-y|不在盒子里,那么久把|x-y|放进去,设操作次数为p1,然后执行操作2,不断摸球,直到所有球都被摸过,设原创 2017-03-29 10:38:27 · 370 阅读 · 0 评论 -
求解一个矩阵的逆矩阵
c++#includeusing namespace std;const int N=20;const double E=1e-10;double calculate_A(double src[N][N], int n ){ int i,j,k,x,y; double tmp[N][N], t; double result = 0.0; if(n ==原创 2017-04-12 14:46:32 · 3215 阅读 · 0 评论 -
最近&最远点对
HDU 1589 Stars Couple(计算几何求二维平面的最近点对和最远点对)最远点对相当于求凸包中最远的两个点(先求凸包,然后n*n枚举)最近点对 二分#include#include#include#includeusing namespace std;const int M=50005;typedef struct Point{doubl原创 2017-04-06 17:36:25 · 888 阅读 · 0 评论 -
用1×2骨牌覆盖n×m棋盘,有多少种方法
传送门1:UVA 11270 Tiling Dominoes#includeusing namespace std;const int maxn=1<<12;long long dp[2][maxn];int cur,n,m;void add(int a,int b){ if(b&(1<<m)) dp[cur][b^(1<<m)]+=dp[cur^1][原创 2017-04-25 19:04:14 · 3281 阅读 · 0 评论 -
LCA最近公共祖先(RMQ、Tarjan)
今天学LCA,先照一个模板学习代码,给一个离线算法,主要方法是并查集加上递归思想。http://poj.org/problem?id=1330再搞,第一个离线算法是比较常用了,基本离线都用这种方法了,复杂度O(n+q)。通过递归思想和并查集来寻找最近公共祖先,自己模拟下过程就可以理解了。 然后就是在线算法,在线算法方法就很多了,比较常用的是LCA的RMQ转换,然原创 2016-07-11 12:51:27 · 402 阅读 · 0 评论 -
快速幂(普通快速幂、矩阵快速幂)
题目地址:HDU 2604 Queuing题意: n个人排队,f表示女,m表示男,包含子串‘fmf’和‘fff’的序列为O队列,否则为E队列,有多少个序列为E队列。分析: 矩阵快速幂入门题。 下面引用巨巨解释:用f(n)表示n个人满足条件的结果,那么如果最后一个人是m的话,那么前n-1个满足条件即可,就是f(n-1); 如果最后一个是f那么这个还无法推出原创 2016-07-10 11:28:16 · 424 阅读 · 0 评论 -
二分&三分
http://acm.hdu.edu.cn/game/entry/problem/list.php?chapterid=4§ionid=1经典的三分HDU 3400 Line belt (三分再三分)ACM题目地址: HDU 3400 Line belt题意: 就是给你两条线段AB , CD ,一个人在AB以速度p跑,在CD上以q原创 2016-07-10 16:09:34 · 400 阅读 · 0 评论 -
表达式求值
http://acm.nyist.net/JudgeOnline/problem.php?pid=35 #includeusing namespace std;const int N=1e3+7;const int inf=0x3f3f3f3f;char str[N];stack num;stack op;int priority(char c){ if(c=='+'原创 2016-07-24 18:28:38 · 314 阅读 · 0 评论 -
强连通分量(Korasaju、Tarjan)
常见的(我见过的)强连通分量的三种算法有:1. Kosaraju算法(双DFS)2.Tarjan算法 3.Gabowhttp://acm.hdu.edu.cn/showproblem.php?pid=1269一.Kosaraju算法算法的核心实现是,首先DFS一遍,得到一个DFS森林,在此过程中得到所有点的拓扑序列(按结束时间由高到低),之后我们建一个反向图,按反拓扑序(结束时间由原创 2016-08-08 17:37:51 · 2335 阅读 · 0 评论 -
欧拉函数
在数论,对正整数n,欧拉函数是小于n的数中与n互质的数的数目。性质① m是素数时,有φ(m)=m-1性质② 当m、n互素时,φ(m*n)=φ(m)*φ(n)性质③ 对一切正整数n,有φ(p^n)=[p^(n-1)]*(p-1)规定 φ(1)=1利用性质判定:#include#include#includeusing namespace std;typedef long lon原创 2016-01-28 14:05:51 · 430 阅读 · 0 评论 -
网络流(最大流、最小费用最大流、有上下界的网络流)
最大流的算法:Ford-Fulkerson算法 求最大流的过程,就是不断找到一条源到汇 的路径,然后构建残余网络,再在残余网络 上寻找新的路径,使总流量增加,然后形成 新的残余网络,再寻找新路径…..直到某个 残余网络上找不到从源到汇的路径为止,最 大流就算出来了。 每次寻找新流量并构造新残余网络的过程, 就叫做寻找流量的“增广路径”,也叫“增 广” 现在假设每条边的容量原创 2016-08-09 11:09:28 · 5101 阅读 · 2 评论 -
最小生成树(Kruska、Prim)
Kruska:将所有边从小到大加入,在此过程中 判断是否构成回路 – 使用数据结构:并查集 – 时间复杂度:O(ElogE) – 适用于稀疏堆(结构体优先队列)#includeusing namespace std;const int N=1e3;struct node{ int x,y,val; node(){} node(int a,in原创 2016-08-08 14:13:17 · 360 阅读 · 0 评论 -
最大二分匹配(匈牙利算法)
http://poj.org/problem?id=1469类似网络流的思想,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法#include#include#includeusing namespace std;const int N=300+7;const int M=100+7;int mp[M][N],f[N];bool used[N];原创 2016-08-12 16:08:56 · 506 阅读 · 0 评论 -
素数判断(朴素、高效)
朴素判定bool prime(int x){ int y=sqrt(x); for(int i=2;i<=y;i++) if(x%i==0) return 0; return x==1?0:1;}高效判定bool prime(int x){ if(x==2||x==3) return 1; if(x%6!=1&&x%6!=5)原创 2016-08-13 10:31:24 · 529 阅读 · 0 评论 -
数字间的转换(进制转换、小数化分数)
a进制转十进制const int p=16;//p代表 a进制 string s; int a() { int n=0,fal=1; for(int i=0;i<s.size();i++) { if(s[i]=='-') fal=-1; else if(s[i]>'9') n=n*p+s[i原创 2016-08-13 10:39:52 · 962 阅读 · 0 评论 -
子序列(LIS、LCS)
LISint lis(int n) { memset(dp,0,sizeof(dp)); int ans=0; for (int i=0;i<n;i++) { for (int j=0;j<i;j++) if(b[j]<=b[i]) dp[i]=max(dp[i],dp[j]+1);原创 2016-08-24 19:04:58 · 359 阅读 · 0 评论 -
C++(STL)
C++ STL1.sort2.vector3.set4.map5.queue6.priority_queue7.next+permutation//sort(str.begin(),str.end());8.stack9.pair10.list读取数据:freopen("位原创 2016-08-15 09:15:56 · 290 阅读 · 0 评论 -
数位dp
讲解:http://blog.csdn.net/niuox/article/details/9864199https://www.bnuoj.com/v3/problem_show.php?pid=52325#includeusing namespace std;typedef long long ll;//位数 数字 关系ll f[20][10][5],sum[20],g[原创 2017-03-29 10:26:20 · 903 阅读 · 0 评论