![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
暴力
文章平均质量分 50
goto_1600
我何来寂寞,哪有寂寞可言。
展开
-
5917. 同源字符串检测 暴力 dp 字符串匹配
link题意:给定目标字符串s1,s2问是否存在一个字符串能满足生成s1并且生成s2,s1和s2中会有一些数字,数字可以任意分割成某些字符。len<=40任意连续数字不出现超过3个len<=40 任意连续数字不出现超过3个len<=40任意连续数字不出现超过3个思路:dp[i][j][k]dp[i][j][k]dp[i][j][k]代表匹配到s1的i处,匹配到s2的j次,当前s1比s2的通配符多k个,最后check(dp[n][m][0])就可以了。如何转移呢,分类讨论即可,del原创 2021-11-01 14:58:53 · 197 阅读 · 0 评论 -
AcWing 252. 树 点分治
Link题意:思路:口胡一下点分治,点分治之所以能保证复杂度是他的递归层数<=log(n),是因为树的重心的性质:树的重心中的最大子树也不超过n/2,这样下去n每次都会/2所以最多不超过logn层,然后每一层的复杂度不超过n,甚至可以套一个log。那么回到这题,运用点分治,每次找到目前子树的重心,然后不断递归求解,由于对于当前的点来说<=k的情况只有两种,一种是经过他,一种是不经过他,不经过他可以递归子树求解,经过他,可以暴力求解,暴力存储所有子树点到他的距离,然后容斥一下,也就是排除原创 2021-09-23 11:24:38 · 199 阅读 · 0 评论 -
icpc网络赛 J Red-Black Paths离线,前缀异或,重构图,暴力剪枝
Link题意:给定一个图,按照时间顺序建图,给点染成红黑色,求相邻两次询问之间新增的红黑路的价值的异或和,红黑路的价值指的是路上每个点的权值乘以长度。数据保证所有红黑路长度<=10。保证所有红黑路<=5000000思路:由于可以离线,我们可以按照时间序来存储图,由于我们只要红开头,黑结尾的,对于其他的我们可以减枝,把无关紧要的点去掉,一看复杂度,∑红黑路<=5000000\sum红黑路<=5000000∑红黑路<=5000000,就算每次暴力搜索红黑路也只有O(10)O原创 2021-09-23 11:18:02 · 378 阅读 · 0 评论 -
Spicy Restaurant (暴力多源bfs)
Link题意:有n个城市,每个城市有个辣度,给你个图,有q次询问求某个点开始,忍耐度为w,求最近辣度<=w的最短路,边权为1。q<=5e5 n<=1e5 m<=1e5 wi,w<=100q<=5e5 \space n<=1e5 \space\space \space m<=1e5 \space wi,w<=100q<=5e5 n<=1e5 &nb原创 2021-09-14 08:57:27 · 516 阅读 · 1 评论 -
D. Present按位拆分算贡献
链接求这个公式的答案 n<=400000 ,a[i]<=4e7思路:一开始就想到了按位算贡献,但是没有发掘一个性质,某一位k只受<=它的位数所影响,所以我们可以考虑按位统计,出现第k位为1有两种情况,一种情况是两数之和>=(1<<k) && <(1<<(k+1)) 还有一种是>=(1<<k)+(1<<(k+1)) ,在统计每一位的时候将a[i]%(1<<(k+1))放入数组中,将新数组排序原创 2021-05-31 10:38:21 · 211 阅读 · 0 评论 -
D - GCD and MST
link思路:暴力加剪枝。我们可以发现,答案肯定<=(n-1)*p,所以对于gcd大于等于p的区间我们可以不用考虑他带来的贡献,根据克鲁斯卡尔贪心的原则,我们可以按照点权来排序,从小到大枚举,然后嗯往左和右拓展,直到不能拓展或者找到在相同集合的数为止或者区间gcd不是当前数为止。为啥能在相同集合的时候break呢?假设当前左右区间是[i,j],i和j属于同一个集合,由于在相同集合,肯定会有更小的gcd连接他俩,对于左区间,能满足当前的gcd,肯定也能满足更小的_gcd,所以再往下拓展是没有必要的.原创 2021-04-13 11:23:55 · 185 阅读 · 0 评论 -
牛客小白月赛30部分题解
思路:是dp吧, 一开始没想到,瞄了一眼题解,线性dp,dp[i][2]dp[i][2]dp[i][2] 代表考虑前1~i个不同的数获得的最大值,0表示当前第i位不选,1代表选了,转移就不用说了,我预处理了每个数出现的次数,然后排序,去重使得dp不具有后效性。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;#define int long long #define debug printf("--.原创 2020-12-06 22:17:50 · 399 阅读 · 0 评论 -
CF362C Insertion Sort树状数组,思维,枚举
题意:先交换任意两个,然后只能交换相邻两个,问最少操作次数和方案。思路:由于冒泡排序有个定理就是逆序数的个数等于最少的交换相邻元素的次数,问题就转换为了交换两个数并且使得整个数组逆序数个数最少,我们枚举交换哪两个数,用树状数组处理b[i][j],f[i][j],i之前大于a[j]的个数,i之后小于a[j]的次数,我们交换两个数逆序数就转变为原序列-原来他俩对数组造成的影响+他俩对新序列造成的影响再加1,为什么加1?证明:当a[i]>aj那么交换了就减去了2,多减了1我们加回来,反之小于的话,交换完.原创 2020-09-10 14:35:46 · 321 阅读 · 2 评论 -
字符串配对 qdu蓝桥训练
`#include#include#include#include#include#include#include#include#include#define IL inline#define x first#define y secondtypedef long long ll;using namespace std;char s[10010];int main(...原创 2020-04-28 20:31:00 · 217 阅读 · 0 评论 -
E2. Three Blocks Palindrome (hard version)
解题报告:写这种题还是暴力香,虽然我也没有想到,现在懂了,然后二维前缀和可以不用memset,就因为这个tle的,这题做法就是维护前缀和(每个数在某段区间出现的个数)因为总共就200个数,然后把各个数的位置push进vector,每次对称着取两个位置加上中间的前缀和之差不断更新ans,就能解决这题啦!#include<iostream>#include<algorithm&...原创 2020-04-26 20:43:55 · 418 阅读 · 0 评论