上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: 中文题面 这道题就是LightOJ某题的升级版 前段时间我是直接用√k前暴力后分块的处理方式,然后直接套个等差求和 这次看到了dalao的证明再次让我知道我好菜啊 在这里做下笔记,学习一下对于整除运算的分析方法 关于$[\frac{k}{i}]×i,i∈[1,n]$的处理 令$x∈[1,k],g(x 阅读全文
posted @ 2018-02-14 02:27 Caturra 阅读(176) 评论(0) 推荐(0)
摘要: 枚举ak的值 反向枚举使ak尽快到达最短链的n C++ / H E A D / int n,m,a[23333],dep; bool dfs(int x){ if(a[x 1] n||a[x 1]dep){ if(a[x 1]==n) return 1; else return 0; } // re 阅读全文
posted @ 2018-02-13 17:16 Caturra 阅读(138) 评论(0) 推荐(0)
摘要: 题意:给定n条拆掉的棍子,问能凑成最短的多条相同长度棍子的最短长度 x:当前第几条正在合成的棍子 y:目前正在尝试的拆掉的棍子 z:当前长度 剪枝方案: 1.按照长度单调性排序,减少重复搜索 2.如果当前拼接棍子失败,那接下来相同长度也会失败 3.第一条棍子就失败就不必搜索了 阅读全文
posted @ 2018-02-13 15:19 Caturra 阅读(169) 评论(0) 推荐(0)
摘要: 经典sudoku问题 按部就班就好 一定要注意细节 大于1还是大于等于1 r c越界判断 judge时0的特判 blabla居然磨了2个小时 改了很多地方所以实现得有点冗余,反正能A吧 阅读全文
posted @ 2018-02-12 01:59 Caturra 阅读(166) 评论(0) 推荐(0)
摘要: 题意:给定n个商品的deadline和profit,求每天卖一件的情况下的最大获利 显然是一道贪心 按deadline从小到大排序好,动态维护小根(profit)堆的大小b.p; } ll n; int main(){ while(cin n){ ll day=0; priority_queue,g 阅读全文
posted @ 2018-02-10 23:05 Caturra 阅读(121) 评论(0) 推荐(0)
摘要: 有点小细节需要注意 sum实时维护有效的连续和 C++ / H E A D / ll dp1[maxn],dp2[maxn]; ll a[maxn],n,sum; int main(){ while(~iin(n)){ rep(i,1,n) a[i]=read(); dp1[0]= (1ll 阅读全文
posted @ 2018-02-10 01:28 Caturra 阅读(130) 评论(0) 推荐(0)
摘要: 在一个Text串中找出Pattern串E以满足EAEBE,A B可以是任意串 看一眼觉得woc好难,后来看一下样例AB为空也可以 找观察一下E既是前缀也是后缀,很容易联想到next 最优情况EEE,那就是3 × next[j] == j A,B任取,那只要进一步保证 3 × next[j] 0&&P 阅读全文
posted @ 2018-02-09 21:30 Caturra 阅读(129) 评论(0) 推荐(0)
摘要: https://www.cnblogs.com/chenxiwenruo/p/3546457.html 阅读全文
posted @ 2018-02-09 19:15 Caturra 阅读(142) 评论(0) 推荐(0)
摘要: 只要KMP里对f[i]进行限制即可 阅读全文
posted @ 2018-02-09 18:38 Caturra 阅读(145) 评论(0) 推荐(0)
摘要: ```C++ /*H E A D*/ int nxt[maxn]; char P[maxn]; void buildNext(){ nxt[1]=0; int j=0,m=strlen(P+1); rep(i,2,m){ while(j&&P[i]!=P[j+1])j=nxt[j]; if(P[i]==P[j+1])j++; nxt[i]=j; } } int main(){... 阅读全文
posted @ 2018-02-09 17:25 Caturra 阅读(95) 评论(0) 推荐(0)
摘要: 如果循环节存在那在前缀部分也肯定存在 如果循环节存在那至少是可以匹配的 而next是维护最大前缀的,意会意会 注意一定要先判整除,即使别的题目保证是存在循环的 特意画了一张灵魂草图帮助理解 阅读全文
posted @ 2018-02-09 17:09 Caturra 阅读(168) 评论(0) 推荐(0)
摘要: 题目的匹配应该也要看成一个文本串与另一个模式串的匹配过程 Text是以当前i结尾的后缀来匹配Pattern的前缀(非真) 这里的Pattern肯定是可以匹配成功的,直接由next来保证(next总是当前结尾的最大前缀,恰好满足递推的需要) (说的不是很准确,就是kmp匹配过程时使用的方法) 举个栗子 阅读全文
posted @ 2018-02-09 15:46 Caturra 阅读(116) 评论(0) 推荐(0)
摘要: 循环移位的套路操作就是一份折开变两份 C++ / H E A D / void match(){ int n=strlen(T+1); int m=strlen(P+1); int j=0; rep(i,1,n){ if(flag)break; while(j 0&&(j==m||T[i]!=P[j 阅读全文
posted @ 2018-02-09 01:52 Caturra 阅读(138) 评论(0) 推荐(0)
摘要: ```C++ /*H E A D*/ int nxt[maxn],f[maxn],ans; char T[maxn],P[maxn]; void init(){ int m=strlen(P+1); int j=0; nxt[1]=0; rep(i,2,m){ while(j>0&&P[i]!=P[j+1]) j=nxt[j]; if(P[i]==P[j+1])j++; nxt... 阅读全文
posted @ 2018-02-09 01:31 Caturra 阅读(109) 评论(0) 推荐(0)
摘要: 题意:给定$a[1...n]$,求$(a_i⊕a_i+1⊕...⊕a_j)+(a_p⊕a_{p+1}⊕...⊕a_{q})$的最大值,其中$1≤i≤j= 0; k ){ c=((x k)&1); if(!ch[now][c]){ ch[tot][0]=ch[tot][1]=0; sz[tot]=0; 阅读全文
posted @ 2018-02-08 01:24 Caturra 阅读(180) 评论(0) 推荐(0)
摘要: ```C++ /*H E A D*/ struct Trie{ int son[maxn>i)&1; rrep(i,32,0){ if(!son[now][b[i]]){ son[now][b[i]]=++tot; son[tot][0]=son[tot][1]=0; ... 阅读全文
posted @ 2018-02-08 00:53 Caturra 阅读(109) 评论(0) 推荐(0)
摘要: ```C++ / H E A D / int main(){ int T=read(); while(T ){ ll a=read(); ll b=read(); ll c=read(); ll d=read(); ll ans=0; ll x=0,y=0; rrep(i,61,0){ bool p 阅读全文
posted @ 2018-02-07 23:57 Caturra 阅读(122) 评论(0) 推荐(0)
摘要: 我对莫队算法最为纠结的地方就是区间端点处,应该是像代码里那样理解吧 cnt[i]表示i出现的次数 maxn开2e6比较保险 阅读全文
posted @ 2018-02-07 22:06 Caturra 阅读(175) 评论(0) 推荐(0)
摘要: ```C++ / H E A D / struct Trie{ int son[maxn i)&1; rrep(i,32,0){ if(!son[now][b[i]]){ son[now][b[i]]=++tot; son[tot][0]=son[tot][1]=0; } now=son[now][ 阅读全文
posted @ 2018-02-07 15:47 Caturra 阅读(106) 评论(0) 推荐(0)
摘要: 依然是异或运算,这次是限制L,R范围内挑2个数使其异或值最大 如果r最高为是pos,那最理想状态当然是(1ll l r){ if(l r) swap(l,r); if(l==r){ cout i)&1){ pos=i; break; } } coutj k 0),无论如何异或,2^i是无效的,这时的 阅读全文
posted @ 2018-02-07 01:45 Caturra 阅读(129) 评论(0) 推荐(0)
摘要: 求[1,n]内k的值的异或和使其值最大 k=1是肯定是n k 1,设pos是n的最高位,那答案就是(1ll 阅读全文
posted @ 2018-02-07 01:20 Caturra 阅读(206) 评论(0) 推荐(0)
摘要: 异或关于前缀的特性:[u,v]=[1,u]^[1,v] 注意是路径,假设1为根,prexor[1]不保留数值 C++ / H E A D / int to[maxn =1; } rrep(i,31,0){ if(!son[now][b[i]]) son[now][b[i]]=++tot; now=s 阅读全文
posted @ 2018-02-07 00:12 Caturra 阅读(167) 评论(0) 推荐(0)
摘要: //為什麼我的Chrome OS更新後變成強制繁體了?? 題目要求使用最少的雙端隊列來維護一個單調非降序列 先來看下規律 首先,val肯定是單調非降的,在相等val範圍內的id可以xjb亂放不影響 其次,在單調可解的val範圍內,id一定是中間小兩邊大(中間是最初維護的,而兩邊是不斷地插入肯定越來越 阅读全文
posted @ 2018-02-04 00:57 Caturra 阅读(132) 评论(0) 推荐(0)
摘要: 算是回顾吧 扫描计算时的高度是单调递减的, 最相对较高的能延伸的矩阵[全部]计算完以后都合并成一个待计算的相对较矮的单一矩阵 规定合并后的矩阵留到下一次计算 一直扫描到栈空(哨兵h[n+1]==0处)即可 STL炒鸡好用干嘛要手写啊 阅读全文
posted @ 2018-02-03 01:58 Caturra 阅读(109) 评论(0) 推荐(0)
摘要: Get到了全新O(1)替代部分伸展树功能的姿势 左栈stk1维护当前信息,右栈stk2维护历史删除信息 题目求的是严格的前缀和(且小于当前指针)那就每次左栈新增时再更新前缀和信息就好 即使把题面换成最大子段和也是一样搞法 要是O(1)求1到k的最大/小值?再来多一个维护历史的栈..应该可以吧 阅读全文
posted @ 2018-02-02 22:10 Caturra 阅读(117) 评论(0) 推荐(0)
摘要: cow按st排序 stall按ed排序 其实stall里的st并不用维护,因为cow已经关于st自然有序 阅读全文
posted @ 2018-02-02 15:55 Caturra 阅读(102) 评论(0) 推荐(0)
摘要: 依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个数与mid作差再转变为求非负子段 子段和问题应该利用前缀和C,长度大于等于L的字段和最大值可表示为 阅读全文
posted @ 2018-02-01 20:26 Caturra 阅读(106) 评论(0) 推荐(0)
摘要: 求A^B的约数和模MOD 对A质因子分解P1^k1 P2^k2....P^kn A^B既指数对应部分乘以B 对于每个P都有(1+P^1+P^2+...+P^ki)的选择 连乘每一个P的等比数列之和即可 这里用了分治法,我觉得有必要记一下,不然推错就麻烦了 奇数部分sum(p,c)=(1+p^(c+1 阅读全文
posted @ 2018-01-31 10:04 Caturra 阅读(115) 评论(0) 推荐(0)
摘要: 1. cnt==0时不要输出 2. 往下枚举不要傻傻地rep,前面cal就已经选择了不枚举 3. 如果只随机选出m个直接加判定cnt m||cnt+n x+1 阅读全文
posted @ 2018-01-31 08:54 Caturra 阅读(99) 评论(0) 推荐(0)
摘要: 只需不断维护 相对值 的前缀就能得到解 这种思想第一次是在树状数组区间更新那里看到的,由于题目要求是1~n所以直接可以用前缀和维护 注意不能直接 1 +1 还有POJ的数据..要不是书里有提谁知道会这么毒瘤 阅读全文
posted @ 2018-01-31 08:38 Caturra 阅读(378) 评论(0) 推荐(0)
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页