随笔分类 - 洛谷
摘要:Jennie 搞出一个二维dp'还是比较显然的 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> #define int long l
阅读全文
摘要:Jinnie 显然还是一个线性基的问题,那么很显然要用线性基 对于一堆石头$S_1,S_2,S_3 $,如果加入X会令异或值为0的话,那么显然我们可以拿出一块再把x放进去 这样只需要线性基检查能不能放,从大到小放就行。 这告知了我们求线性基可以考虑改变顺序 #include<bits/stdc++.
阅读全文
摘要:Jinnie 显然是一个线性基的问题,那么很显然要用线性基 想要知道所有的方案数,线性基的性质就是用其中的元素$xor$ 出来的元素保证互不相等 这样的话只要知道线性基内元素的数量就可以了 #include<bits/stdc++.h> #define int long long using nam
阅读全文
摘要:Lisa 删边似乎挨个删复杂度也不会高到离谱 毕竟也就是$O(2*n)$的事。,因为显然可以想到先删点权最大的点,然后拓扑排序缩点啥的来一波 但是也可以从边的考虑,每一条边只会被删一次,且应会是在删两边较大的那个点的点权的时候被删,这样从边的视角考虑就省事了。 #include<cstdio> #i
阅读全文
摘要:Lisa 如果真的要枚举,排序暴力硬做的话肯定会挂掉 那么就是要优化的,显然划分一个2c的序列,答案不回比划分两个c的更优 可以画个图证明一下 而划分成小于c的序列,就相当于划分成一堆1的序列 划分成c-2c的序列呢?显然是不如划分成c和另外一个,肯定不会更差 这样的话就检查划分成c和1就可以解决了
阅读全文
摘要:JIsoo 期望得分要dp,然后期望长度是有关系的 那就一块dp #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> using nam
阅读全文
摘要:JIsoo 就是一个背包 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> using namespace std; #define
阅读全文
摘要:JIsoo 关键在于压缩长度 不会证明怎么办 感性理解开个大数$st10$ #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> usin
阅读全文
摘要:JIsoo 首先考虑floyd本质就是dp,然后扔进新的一维$f_{i,j,k}$,表示i和j之间经过k条边的最短路 枚举的时候是5个for?那也太疯狂了。 考虑一下如果i和j经过k能够作为当前边数的最短路的话,如果k和i,j距离不是1,那么在这一条路径上,一定可以用距离i为1的那个点来更新,这样的
阅读全文
摘要:Jisoo 找一个最长的周期 就是要找最短的border然后加上中间的部分 这样 $kmp$出动 然后发现可以 “记忆化”一波进行优化 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<alg
阅读全文
摘要:Jisoo 作为dp来说这个题没啥意思 但是从中我们可以学到数学证明对于dp的指导 例如,只要 \(a_j\) 和$a_i$ 都不等于 \(0\) 那么这个序列是对数增长 这样似乎暴力也不怎么暴力了 #include<iostream> #include<cstdio> #include<cstri
阅读全文
摘要:Lisa 尺取法搞一波 然后前缀和优化一波 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int a[500005]; bo
阅读全文
摘要:Lisa 显然两个在一起的空格是没有意义的。 所以空格的相对的一定是字符 这样在匹配的时候考虑对于两个字符,加不加空格和加在哪里 因为连续的空格有额外贡献 所以要记录有没有和在哪里 #include<iostream> #include<cstdio> #include<cstring> #incl
阅读全文
摘要:Lisa 显然的dp,只需要再二分查找一下 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n; struct to{
阅读全文
摘要:LIsa 就DP本身来说非常好想,但是怎样知道这个东西有没有在字典里出现过呢 hash似乎还是有点慢 这时候就应该用字典树了 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorith
阅读全文
摘要:Lisa 很水的kmp小题 思考一下就可以知道,肯定要跑kmp,但是当我们删掉一个串后剩下怎么办 答:从上一次的位置接着匹配 记录一下这个东西就行了 #include<iostream> #include<cstring> #include<iostream> using namespace std
阅读全文
摘要:LIsa 就是一个背包 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> #define int long long using na
阅读全文
摘要:LIsa 只要理解kmp,就会知道应该找前缀和后缀了 把当前输入的串和已知的答案串拼起来,然后中间加上一个小小的不存在字符,跑kmp #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cm
阅读全文
摘要:Jisoo 枚举一下next也没事 也可以运用结论 这个结论画个图证明就可以了 #include<cstdio> #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> us
阅读全文
摘要:Jisoo kmp中的next数组表示按照当前位置结尾的相同的最大真前缀和后前缀长度 那么如果这玩意真的存在,那么next[n] 一定不为零 然后枚举一下2-n-1,找找有没有相等的next就可以了 #include<cstdio> #include<iostream> #include<cstri
阅读全文