摘要:
目前做过的最纠结的一道递推题。 情况比较多,比较复杂。。。 这题最主要的还是要推出当m=2 时和m>2时,用什么方法最优。 给个数据 n=3,m=2 需要48 n=3,m=3 需要81 如果在纸上把这两种情况推出来,这题就容易找到递推。 m=1,就是最基础的汉诺塔递推了。 Time Limit: 2 阅读全文
摘要:
题意是:给你一个1-n的排列,要你把这个排列分成两个序列,且这个两个序列都满足单调性。 题解: 1.首先假设找出的两个序列都是单调递增的(都是单调递减的同理) 那么很容易可以想到,将新加入的数放入到某个序列尾端,使得另一个序列尾端的数尽量小。 2.如果最后的两个序列为一个递增一个递减。 这种情况下, 阅读全文
摘要:
莫队算法详解 本文翻译自MO’s Algorithm (Query square root decomposition),作者anudeep2011,发表日期为2014-12-28。由于最近碰到一些莫队算法的题目,找到的相关中文资料都比较简略,而这篇英语文章则讲解的比较详细,故翻译成中文与大家分享。 阅读全文
摘要:
bitset这个东西,是c++里面封装好了的处理多位运算的东西。 亲测比自己写快10倍以上。 以下是概念: std::bitset是STL的一部分,准确地说,std::bitset是一个模板类,它的模板参数不是类型,而整形的数值(这一特性是ISO C++2003的新特性),有了它我们可以像使用数 阅读全文
摘要:
类似于斜率优化的东西,果真CF的E以后才会考点算法啊。 感觉这种优化应该很常见,但这题直线只有第一象限的,但是插入,和查找操作是不变的,按极角排序后就可以直接用这个模板了。 #include <iostream> #include <stdio.h> #include <string.h> #inc 阅读全文
摘要:
首先,由题意三个数都为正整数,且某两个数的和等于第三个,且第一轮提问中三个人都说不确定可知,三个人中没有两两相同的数存在。 这样就排除了A,D 然后看选项B 站在第三个人的立场,看到其他两个人是36,108则他自己可以为144或72。 这时第三个人如果假设他是72,那么在108那个人的眼中本来为36 阅读全文
摘要:
void RMQ_init() { for(int i=1; i<=n; i++) dp[i][0]=s[i]; for(int j=1; (1<<j)<=n; j++) for(int i=1;i+(1<<j)-1<=n;i++) dp[i][j]=max(dp[i][j-1],dp[i+(1<< 阅读全文
摘要:
换了个模板。 O(n)复杂度求P串出现在T串中的所有位置。 void getFail(char* P, int* f) { int m = strlen(P); f[0] = 0; f[1] = 0; for(int i = 1; i < m; i++) { int j = f[i]; while( 阅读全文
摘要:
扩展KMP指的是 对于给出的串S和T,以O(n)的时间求出。 对于所有0<=i<len(S),S(i,i+1,...,len(s)-1)与T的最长前缀长度。 next[i]为满足B[i..i+z-1]==B[0..z-1]的最大的z值。 以下是模板: #include <iostream> #inc 阅读全文
摘要:
唉 被秀了。。。 还是太弱,说好的数形结合呢,列个式子出来后就被吓到了,然后就懵逼了。 题意: 有一条狗,从原点出发,沿n个向量走,每个向量只走一次,沿着一个向量(x,y)走时,既可以往(x,y)方向走,也可以往(-x,-y)方向走。 然后问这条狗离原点最远的距离。 如果写成方程: n个向量分别表示 阅读全文