bzoj 5337 [TJOI2018] str】的更多相关文章

bzoj 5337 [TJOI2018] str Link Solution 水题 直接 \(f[i][j]\) 表示以第 \(i\) 位为结束位置,当前已经匹配了前 \(j\) 个氨基酸的方案数 使用哈希转移 转移复杂度 \(O(10)\),总复杂度 \(1e7\) Code #include<stdio.h> #include<cstring> #include<cstdlib> #include<algorithm> #include<vecto…
[BZOJ5337][TJOI2018]str(动态规划,哈希) 题面 BZOJ 洛谷 题解 就很呆... 显然按层\(dp\),如果能够匹配上就进行转移,直接哈希判断是否能够匹配就好了... #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MOD 1000000007 #define MAX 10010 #define ull unsigned lon…
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5338 题面: 5338: [TJOI2018]xor Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 269  Solved: 171[Submit][Status][Discuss] Description 现在有一颗以1为根节点的由n个节点组成的树,树上每个节点上都有一个权值vi. 现在有Q 次操作,操作如下: 1  x y    查询节…
BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的时候,为了方便就先算一下LCA的答案. //83472kb 3316ms #include <cstdio> #include <cctype> #include <algorithm> #define BIT 29 #define gc() getchar() #defi…
BZOJ 洛谷 题意的一点说明: \(k\)次方这个\(k\)是固定的,也就是最初需要多少张亵渎,每次不会改变: 因某个怪物死亡引发的亵渎不会计分. 不难发现当前所需的张数是空格数+1,即\(m+1\). 贡献不妨写成:\(\sum_{i=1}^ni^{m+1}-\sum_{i=1}^mA_i^{m+1}\).注意此时的\(A_i\)是剩下的空格(具体看代码最底下的暴力部分吧). 所以问题在于求\(\sum_{i=1}^ni^{m+1}\).自然数幂和有很多种求法. 这里写插值做法: \(\su…
题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞了,考虑 DFS 序. 子树查询转成 DFS 序上一段区间,而链上查询转成两条链. 所以维护两(个?)种可持久化 01trie,一个按照 DFS 序,另一个按照从根到结点的路径. 还要求 LCA,这里我写了个倍增. #include <cstdio> inline int Max(int x, i…
题意 小豆参加了生物实验室.在实验室里,他主要研究蛋臼质.他现在研究的蛋臼质是由k个氨基酸按一定顺序构成的.每一个氨基酸都可能有a种碱基序 列si_j 构成.现在小豆有一个碱基串s,小豆想知道在这个碱基上都多少中不同的组合方式可能得到这个蛋白质.即求由k段字符串有序合并成的字符串s1,有多少种不同方式能够匹配字符串s,其中k段字符串的选法不同,或者与s匹配上的位置不同认为是不同的方式. \(1 ≤ k ≤ 100, |s| ≤ 10000,a_i ≤ 10\) 分析 参照scarlyw的题解.…
线段树裸题 难度在于认识到这个没法线性做 #include<cstdio> using namespace std; int n,mod,tr[400005]; void insert(int t,int l,int r,int x,int y){ if (l==r){ tr[t]=y; return; } int mid=(l+r)>>1; if (x<=mid) insert(t<<1,l,mid,x,y); else insert(t<<1|1,…
状压最长公共子序列的DP数组,一维最多K(15)个数,且相邻两个数的差不超过1,2^15种状态,预处理转移 #include<cstdio> #include<algorithm> using namespace std; const int mod=1e9+7; int n,K,now[25],G[25],To[50005][3],F[2][50005][3],ED[50005],ANS[25],S[25]; char s[1000005]; void dfs(int t,int…
强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int tot,edges,tim; int cnt[N*33],ch[N*33][2],tree[N],seq[N],val[N],ba[N]; int fa[N],son[N],size[N],t…