随笔分类 - my ACM
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 using namespace std;11 12 const int Max = 109;13 int num[Max],sg[Max*100],v[Max];14 int n,m;15 16 void get_sg() {17 sg[0] = 0;18 for(int i = 1; i = 0) {21 v[sg[i-num[j]]] = i...
阅读全文
摘要:昨晚西山居第一场的比赛中的最后一题,很明显的Lca,不过发现自己居然没有模板- -,以前都没做过。。。最后网上搞了个模板各种修改,wa了n把终于过了。。。今天来总结下以便下次碰到不至于这么坑。。。在线算法,Lca+Rmq:/**************** *西山居第一场LCA* (1) / \ (2) (7) / \ \(3) (4) (8) / \ (5) (6)一个nlogn 预处理,O(1)查询的算法. Step 1: 按先序遍历整棵树,记下两个信息:结点访问顺序和结点深度. 如上图: 结点访问顺序是: 1 2 ...
阅读全文
摘要:View Code /*判断素数和分解合数Miller-Rabin测试素数,Pollard_Rho分解质因子由于算法本身基于概率,所以存在TLE、WA的可能,多次提交即可*///////////////模板开始//////////////#include <ctime>#include <iostream>#include <algorithm>#include <cmath>using namespace std;#define M 1510#define N 100010#define inf 200000000long long facto
阅读全文
摘要:浙大校内赛的题目,现场比赛的时候只有出两题,后面的模拟题都没时间做了。题意:一辆汽车有个油箱,问他在经过n个加油站后能否到达目的地。每个加油站都有到下一加油站的距离和每升油的价格。就是模拟过程,假设你是开车的你会怎么做,当然是尽量多的使用便宜的油。具体做法见代码:View Code #include <stdio.h>#include <string.h>#include <string>#include <iostream>#include <algorithm>using namespace std;const int Max =
阅读全文
摘要:后缀数组是处理字符串问题的有力工具。其中有些变量需要说明下,sa[i]是排名为第i的后缀所在字符串中的位置。height[i]表示sa[i-1]和sa[i]两个后缀的最长公共前缀,即相邻排名两串的公共前缀。LCP(i,j)也就是后缀数组中第i个和第j个后缀的最长公共前缀的长度例题,uva 12506,求区别所有字符串的最少字符数具体见代码:View Code #include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#inc
阅读全文
摘要:问一段数字区间满足奇数位大于其相邻偶数位的数有多少,值得注意的是其第0位是最高位不是最低位 - -。基础的数位DP。dp[19][10][2],分别表示第几位,前一位数是几,这个为是奇数位还是偶数位。View Code #include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>using namespace std;#define LL long longconst int Mod = 2520;LL dp[19
阅读全文
摘要:apositiveintegernumberisbeautifulifandonlyifitisdivisiblebyeachofitsnonzerodigits.问一个区间内[l,r]有多少个Beautiful数字范围9*10^18一个数字要被它的所有非零位整除,即被他们的LCM整除,可以存已有数字的Mask,但更好的方法是存它们的LCM{git[i]}intMOD=LCM{1,2,9}=5*7*8*9=252010以内的数字情况为2^3,3^2,5,7所以最小公倍数组合的情况只有4*3*2*2=48所以复杂度大概为19*2520*48*10(状态数*决策数)View Code #inclu
阅读全文
摘要:高斯消元是求方程组解的一般方法:它在求矩阵的逆矩阵的时候也最方便的方法View Code #include <stdio.h>#include <cstring>#include <stdlib.h>#include <math.h>#include <iostream>using namespace std;#define max(a,b) ((a) > (b) ? (a) : (b))#define min(a,b) ((a) < (b) ? (a) : (b))#define eps 1e-6const int Ma
阅读全文
摘要:题目大意:给出一个柱形统计图(histogram), 它的每个项目的宽度是1, 高度和具体问题有关。 现在编程求出在这个柱形图中的最大面积的长方形。例如:7 2 1 4 5 1 3 37表示柱形图有7个数据,分别是 2 1 4 5 1 3 3, 对应的柱形图如下,最后求出来的面积最大的图如右图所示。思路:求矩形面积就是要知道宽和高,我们以每一个小矩形为高向两边扩展(扩展到l 和 r),则面积就为h*(r - l);对于前面矩形比我当前扫到点要高,那么这个矩形的 l 必定是前一个矩形的 l .所以我们可以用单调栈维护;正着扫一遍可以得到所有的 l ; 倒着扫一遍得到所有的 r ;详见代码:Vie
阅读全文
摘要:假设湫湫有可能经过的n个城市分别编号从1到n,湫湫要从城市A回到城市B,购票网站上列出了t辆列车行程,每辆车的行程用一个字符串表示,途径的城市间用+号相连,如1+2+3+5代表一辆从1城市分别经过2,3到达5的火车,湫湫可以从中间任意一站出发和下车(路径是单向的,即必须沿字符串从左到右来走),每个字符串对应着一个整数k,k=0表示该车只有硬座,k=1表示该车有卧铺也有硬座,在整个回家的计划中,同一辆车可以坐无限次,为了中途换车的方便,如果在起点坐的是卧铺,则后面乘坐的车必须全是卧铺,同样的,如果在起点坐的是硬座,则后面乘坐的车必须全是硬座,假设一段(一辆车行程中,两相邻城市间为一段)硬座的不舒
阅读全文
摘要:#include <iostream>#include <algorithm>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <cstdio>#include <queue>#include <cmath>using namespace std;const int Max = 13;struct Matrix{ int m[Max][Max];} ;Matrix I;Matrix
阅读全文
摘要:如HDU的4502,把题目抽象成一张图,把区间的头-1,这样就可以连接起来了。View Code #include <cstdio>#include <cstring>const int Max = 109;#define max(a,b) a>b?a:bint mat[Max][Max];int dis[Max];bool vis[Max];int n ,m;void dij(int s) { memset(vis,0,sizeof(vis)); for(int i = 1; i <= n; i++) { dis[i] = mat[s][i]; } vi.
阅读全文
摘要:存一份好一点的强连通模板,主要是数组特别多,要注意初始化!!!不然各种问题,数组越界,值特别大之类的 - -大致题意: 有n个帅哥要泡n个美女。对于每个帅哥,给出他可以选择的美女序号。然后给出一个可行的匹配。对于每个帅哥,求出他可以选择哪些美女,才能使得所有帅哥都有马子泡。View Code #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using namespace std;#define Max 4
阅读全文
摘要:题意:给定起点和终点,每个点都有价值,给出m条双向边和边的权值,可能会有重边。求解:从起点到终点的路径数,走过的点能拿到的最大价值,以及输出那条能拿到最大价值的边。本题主要是需要进行两次最短路,第一次为了算出从起点到任意点的最短距离。第二次最短路根据第一次最短路算出来的最短距离,可以算出从起点到任意点的能拿到的最大价值,还有路径总数。在松弛这些点的时候可以将路径保存下来。递归输出即可。View Code #include <iostream>#include <algorithm>#include <string>#include <string.h&
阅读全文
摘要:题意:一群人要越狱,要用绳子荡过一条沟,给你初速度和体重,和对岸墙的高度,先做单摆运动后是斜抛,当高度和墙同高时松手斜抛。问你最后能成功越狱的有谁名字按字典序输出。View Code #include <iostream>#include <algorithm>#include <string>#include <string.h>#include <cstdio>#include <math.h>#include <vector>using namespace std;#define inf 10000000
阅读全文
摘要:这题是给定许多骨牌,以及相对应的关系, a->b 就表示a 倒之后会推倒 b题目要求说最少推倒几个就可以使骨牌全部倒!View Code #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using namespace std;#define Max 100009#define max(a,b) a>b?a:bstruct node{ int u,v,next;}*Edge;stack<i
阅读全文
摘要:新注册了博客,正好刚刚开始做强连通专题,就当存个模板了题目简述:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的。另外每个奶牛都是欢迎他自己的。求出被所有的奶牛欢迎的奶牛的数目。思路:先得出每个强连通分块的规模,再检查输入的每一条边,如果这边连着2个不同的强连通分块,那么被指向的分块才可能是答案。当答案不唯一时则说明至少有两头牛没有任何关系,这时输出0. 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int Max = 20009; 8 #d...
阅读全文

浙公网安备 33010602011771号