摘要: 今天在hhoj中改了一点代码。之前应用中用ThreadLocal来保存该线程对应的用户UserinfoModel。在线程激活时从Usersession中获取然后放进ThreadLocal中。今天想改成只在Session中保存用户名。线程激活时根据从数据库中获取最新的UserinfoModel。于是问... 阅读全文
posted @ 2015-06-14 22:34 qinhang3 阅读(467) 评论(0) 推荐(0) 编辑
摘要: 给出一个序列,将其分割成长度不超过L的若干组。(设为M组)设B0=0,取出第i组的最后一个数设为Bi若B序列单调递增,则该划分合法。在这个前提下,使得 分数= sigma(Bi^2-Bi-1)最大 (i>0);设元素为a[i];其实就是求一个上升子序列,且元素之间的差不超过L,在求的过程中维护当前的... 阅读全文
posted @ 2014-05-08 22:35 qinhang3 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 这个题的难度都在读题。描述得非常绕。。看懂了就会做了。有一个长度为C的序列,通过将W变成R、G、B 使得序列满足以下的条件将变化后的序列中的B去掉。剩下的R、G的数量为2*M的倍数。将其分成M个不想交的子序列,每个长度为2*D,使得每个子序列都是RGRGRG。。。。求方案数。两个要控制的地方1、RG的数量2、序列的任意前缀都不允许R的数量多余G超过M个F[i][j][k]表示前i个,R与G的差为j-1(防止负数),R与G的和模M为K的方案数。ANS = F[C][1][0];// BEGIN CUT HERE// END CUT HERE#line 5 "AlternativePil 阅读全文
posted @ 2014-04-04 20:32 qinhang3 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 竟然搜过去了。。显然从后往前搜索。每次判断最后若干位是否和目标一致。对于每一位,可以填i个0 j个4 k个7 其中i+j+k==6先预处理出这个。然后按位搜索。#include #include #include using namespace std;int a[100][4];int all;typedef unsigned long long ll;ll M;int d[100],np;ll te[100];void prework(){ all=0; for (int i=0;i> T; ll N; while(T--){ memset(dig,0... 阅读全文
posted @ 2013-10-15 16:18 qinhang3 阅读(153) 评论(0) 推荐(0) 编辑
摘要: ZOJ 3545也是这个题。每个节点的flag表示经过状态压缩的当前节点包含的所有字串。在build的时候直接通过 flag = flag or fail->flag 来更新f[i][j][k]表示长度为i时位于第j个节点包含字串状态为k是否可能因为空间限制,利用滚动数组,注意初始化问题转移的时候 if (f[i][j][k]) f[i+1][son][k|son->flag] =true;初始化 f[0][0][0]=true 后顺推即可。对于每一个状态,预处理出该状态的值。见 void prework(); 函数H[i] = H[i-lowbit(i)]+H[lowbit(i) 阅读全文
posted @ 2013-10-15 14:16 qinhang3 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 给出一个字符串,每次询问一个区间[l,r]中有多少个不同的字串。对于每个区间建立后缀自动机,对每个节点i,设其父节点为j,该节点表示的字串个数为 (i->ml)-(j->ml) 。考虑到询问较多,而自动机默认支持在最后增加节点,对询问区间离线处理,对每个左区间建立后缀自动机。每次询问O(n)扫描自动机统计即可。#include #include #include #include #include using namespace std; const int MAXN = 2010;struct sanode{ sanode* ch[26]; sanode* f; int ... 阅读全文
posted @ 2013-09-24 13:27 qinhang3 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 给出一个凸多边形,和一些墙壁阻挡,求被阴影覆盖的凸多边形的长度。对墙壁进行离散化,计算出角度(atan2)排序后进行区间合并。然后分别计算出每个区间造成的阴影部分的长度,最后相加即可。注意计算阴影部分于多边形的交点时,朴素的o(n)算法会导致TLE。可以用二分去优化。#include #include #include #include #include using namespace std; #define mp make_pair const int MAXN = 100010;const double PI = 3.141592653589793238462643383... 阅读全文
posted @ 2013-09-24 13:23 qinhang3 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 给出字符串A和B。求A的不包含B的不同字串的数量。解法。。字符串匹配+后缀数组。任何字串都会是某个后缀的前缀对字串A建立后缀数组对于排名第k的后缀 SA[k] 将会提供L-SA[k]+1个字串 其中有height[k]个前缀在之前计算过所以每个后缀提供的新字串个数为L-SA[k]+1-height[k]下面考虑不能包含B。对A,B做一次匹配。找出B在A中出现的位置。设为p1,p2,p3...pn;对于排名第k后缀SA[k],其左边界为SA[k],右边界于与边界之间不能包含B。即右边界为大于SA[k]的第一个pi+length(B)-2.预处理出对于每一个左边界对应的最大合法长度MR[k]则对于 阅读全文
posted @ 2013-09-24 13:17 qinhang3 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 两道最小树形图。所谓最小树形图指的是有向图的最小生成树。参考了多位大神的博文终于自己写出来了。。有向图的最小生成树指的是在给定的有向图上找到一个子图点集与原图相同。边集是原边集的子集。有定根的生成树指的是规定某个点为生成树的根,向外延边扩展形成生成树。算法名字叫做刘朱算法。复杂度是O(VE)参考博客http://www.cppblog.com/RyanWang/archive/2010/01/25/106427.aspx1380是很明显的最小树形图题目,直接对给定有向图求树形图即可。模版题实现起来还是有很多要注意的细节。。#include #include #include #include 阅读全文
posted @ 2013-09-24 13:14 qinhang3 阅读(265) 评论(1) 推荐(0) 编辑
摘要: 题意为一只猴子随机输入字符串,每个字母的概率已经给出。求猴子输入长度为N的字符串S1包含模式串S2的概率。很有趣的KMP题目,在Matrix67博客里看过类似的文章,一下子就想起来了。http://www.matrix67.com/blog/archives/366博客里应该说的很明白了。一个利用next数组进行dp的过程。dp[i][j]表示输入第i个字符模式串匹配到第j个字符的概率。然后从上往下dp。。O(n)的状态转移对于每个状态,枚举下一个输入的字符c,设概率为pkmp中,母串每后移一个字符,模式串指针的位置仅由新字符决定。可以根据kmp匹配过程计算出新的j的值。设为j2则dp[i+1 阅读全文
posted @ 2013-09-24 13:11 qinhang3 阅读(650) 评论(0) 推荐(0) 编辑