上一页 1 2 3 4 5 6 7 8 9 ··· 25 下一页
摘要: 卖切糕的小女孩http://www.cnblogs.com/wuyiqi/archive/2012/04/28/2474672.html#include #include #include #define lson l, m, rt > 1; build( lson ); build( rson ); return;}void PushUp( int rt ){ cnt[rt] = cnt[lc] + cnt[rc]; for ( int i = 0; i > 1; if ( L maxAve ) { maxAve = ... 阅读全文
posted @ 2013-09-25 22:42 冰鸮 阅读(465) 评论(0) 推荐(0)
摘要: 把点编号改成1-N,加一点0,从0点到之前任意入度为0的点之间连一条边权为0的边,求0点到所有点的最长路。SPFA模板留底用#include #include #include #include #include #include #include #define ll long long#define inf 1000000000#define maxn 1010using namespace std;struct Edge{ int from,to; int dist; Edge(int a,int b,int c) { from=a,to=b,dis... 阅读全文
posted @ 2013-09-25 10:56 冰鸮 阅读(351) 评论(0) 推荐(0)
摘要: 与其说这是个博弈,倒不如说是个搜索。这题思路不错,感觉很难把情况考虑周全。在地图外围填充一圈0,两次BFS,第一次从-1点出发,把从-1到达的0点以及包围0的那一圈石头标记出来。如下图:6 71 1 1 1 1 1 11 0 0 0 0 0 11 0 3 5 1 1 11 0 -1 4 0 1 11 0 1 0 0 1 11 1 1 1 1 1 1第二次BFS,从外围(0,0)点出发,找出外面与标记石头的交界层:6 71 1 1 1 1 1 11 0 0 0 0 0 11 0 3 5 1 1... 阅读全文
posted @ 2013-09-25 10:48 冰鸮 阅读(287) 评论(0) 推荐(0)
摘要: 两种做法。第一种:标记区间最大值和最小值,若区间最小值>=P,则本区间+2c,若区间最大值#include #include #define lson l, m, rt > 1; build( lson ); build( rson ); return;}inline void PushDown( int rt, int m ){ if ( lazy[rt] ) { lazy[lc] += lazy[rt]; lazy[rc] += lazy[rt]; sum[lc] += lazy[rt]*(m - (m >> 1) )... 阅读全文
posted @ 2013-09-24 22:09 冰鸮 阅读(267) 评论(0) 推荐(0)
摘要: 题意:给你三种颜色表示模式,RGB,HSV和HSL,实现任意模式之间两两转化。1.最好别看题目中给的转化公式描述,我觉得叙述的一点也不清楚,看维基百科,把维基百科上的公式一句一句翻译过来就好2.在公式换算的时候,全部转成小数形式。例如:RGB的取值范围0-255转化成0-1, 即r = R/255.0, g = G/255.0 b = B/255.0……3.HSL->RGB和HSV->RGB需要四舍五入,而HSV和HSL之间的互相转化需要通过RGB: HSVRGBHSL,这里转RGB的时候不需要四舍五入。4.对于自己转自己的情况,例如RGB->RGB,直接原样输出。写的时候脑 阅读全文
posted @ 2013-09-23 21:24 冰鸮 阅读(247) 评论(0) 推荐(0)
摘要: 题意:给你两个串A,B,问一个串长为M+N且包含A和B且恰好包含M个R的字符串有多少种组合方式,所有字符串中均只含有字符L和R。dp[i][j][k][S]表示串长为i,有j个R,在自动机中的状态为k,包含AB的状态为S的方案个数。PS1.之前用long long int超时了两次PS2.把行列搞错了WA了几次#include #include #include #include //#define LL long long intusing namespace std;const int MAX_NODE = 1210;const int CHILD_NUM = 2;const int MA 阅读全文
posted @ 2013-09-23 20:51 冰鸮 阅读(375) 评论(0) 推荐(0)
摘要: 都是从网上找的,交过题试过的应该没问题的模板。KMP//未优化的next函数void getNext(char s[],int next[]){ int length=strlen(s); int i=0,j=-1; next[0]=-1; while(i#includeusing namespace std;const int MM=100005;int next[MM],extand[MM];char S[MM],T[MM];void GetNext(const char *T){ int len=strlen(T),a=0; next[0]=len... 阅读全文
posted @ 2013-09-19 17:09 冰鸮 阅读(275) 评论(0) 推荐(0)
摘要: 模板来自notonlysuccess.模式串只有10个,并且重复出现的分值不累加,因此很容易想到状态压缩。将模式串加入AC自动机,最多有10*100个状态。dp[i][j][k]:串长为i,在Trie图上的状态为j,已经包含的模式串为k(二进制表示,第x位为1代表已经包含第x个串)。dp[i][j][k]为true或false代表该状态是否可达。沿着Trie图中的边走进行DP,时间复杂度O( 100*1000*1024 );最后枚举一下串长为L的所有可达状态,最大值即为结果。PS.内存有限,需要用滚动数组PS2.若使用静态队列的话,队列大小最好开状态数的二倍或者更多#include #incl 阅读全文
posted @ 2013-09-19 17:07 冰鸮 阅读(260) 评论(0) 推荐(0)
摘要: 方法参见:http://blog.acmol.com/?p=751从最后一个线段开始倒着处理(因为之后的线段不会被它之前的线段覆盖),把这条线段所覆盖的所有线段编号合并到一个集合里,并以最左边线段编号为父结点。然后,以后的线段每次都是从右端向左端进行以下处理:1、判断该线段在并查集中的根结点是否被覆盖过(用一个数组标记),如果没有被覆盖,则将该线段所在集合与海报左端点所在集合进行合并(以左端点所在集合为根)。2、然后开始处理刚处理过的线段父结点左边的那一个线段,处理方法与第1步时一样。3、直到要处理的线段在左端点的左边时停止循环。处理时,如果有一个线段未被覆盖,就证明该点的染色没有被之后的染色 阅读全文
posted @ 2013-09-17 22:17 冰鸮 阅读(530) 评论(0) 推荐(0)
摘要: 参考:http://www.cnblogs.com/oyking/p/3323306.html相当不错的思路,膜拜之~个人理解改日补充。#include #include #include #include #define lson l, m, rt > 1 ) ); maxi[rc] = mini[rc] = mini[rt]; sum[rc] = (LL)maxi[rt]*( m >> 1 ); } return;}void PushUp( int rt ){ sum[rt] = sum[lc] + sum[rc]; maxi[rt] =... 阅读全文
posted @ 2013-09-16 20:58 冰鸮 阅读(323) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 ··· 25 下一页