随笔分类 -  c++——算法

摘要:思路: 给出了, 2^p, 然后2x+1, 4x, 发现和二有关 进一步, 2x+1 是在 后面加一位 1, 4x, 是在后面+ 00; 因此直接dp处理 对于本身的a[i], 看有没有数能够更新他即可. -> 有1去1, 有00 去00, 即可 #include <bits/stdc++.h> u 阅读全文
posted @ 2022-11-21 11:32 VxiaohuanV 阅读(21) 评论(0) 推荐(0) 编辑
摘要:分块: 把n分成sqrt(n)块, 中间整体修改,2边暴力修改即可, 修改,查询的复杂度为3sqr(n); 比线段树好写一些? 当然整体的修改的时候,有时候要用 lz 去处理, 和势能线段树有共同的思想. 模板: 建块: cin>>n; int d=sqrt(n); int kn=0; for(ri 阅读全文
posted @ 2022-11-15 18:40 VxiaohuanV 阅读(22) 评论(0) 推荐(0) 编辑
摘要:大佬の思路: 构造题: 首先想,在什么情况下,他是有解或者无解的: 若 a 数组中有数字出现了奇数次,显然无解:因为你的操作只会对每个数字增加偶数个,而一个「好的」数组中每个整数都应出现偶数次 然后就是利用规律,找规律,去增加限制条件去构造(去具体化), 无限次插入2个数, 相当于: 自己要找到这一 阅读全文
posted @ 2022-11-09 11:15 VxiaohuanV 阅读(20) 评论(0) 推荐(0) 编辑
摘要:思路: 把数据列出来, 因为是腻的关系,发现就和指数有关 然后这个就是要去掉重复的, 有重复的数又是和他的ni有关系, 发现数据范围可以用bitset, 时间空间都行,于是就用bitset处理 #include <bits/stdc++.h> using namespace std; #define 阅读全文
posted @ 2022-11-08 11:29 VxiaohuanV 阅读(49) 评论(0) 推荐(0) 编辑
摘要:思路: 题目要 求好节点数最大时的最小值 好节点数是前提条件,那么就分段考虑, 先看哪些点是好节点, 在看好节点时,如何让值最小 贪心发现规律: 2个点之间不能同时好节点, 对于不是好节点的点,然他权值为1即可,好节点为儿子数 dp转移: dp[i][0], 无所谓儿子是好是坏, 当儿子权值一样时, 阅读全文
posted @ 2022-11-08 11:23 VxiaohuanV 阅读(14) 评论(0) 推荐(0) 编辑
摘要:思路: 遇到阶层,他是比2的腻方还要增长地特别快, 超过1e12 只需要 n=15 而且他是要每一个数都是不同的, 因此可以 直接压状dp, 存 阶层可以组合出来的数 然后利用二进制的特性,可以组合成任意的数, 来补一下没有组合出来的数字即可. 然后 t是很小的, 在枚举每一个组合出来的数, 只有3 阅读全文
posted @ 2022-11-08 10:25 VxiaohuanV 阅读(22) 评论(0) 推荐(0) 编辑
摘要:思路: 遇到字典序 一般就是要 从左边到右边一个一个贪心的比较, //////////// 边界条件. 于是由此DP, dp[i],表示i之前都是一样的 i 这个地方比他bi 小的 种类数 关键是 后面这个 有重复元素的组合情况: 结论 有n个数 然后 有些数是重复的, 他的组合情况是: n!/nu 阅读全文
posted @ 2022-11-02 15:08 VxiaohuanV 阅读(23) 评论(0) 推荐(0) 编辑
摘要:思路: 思路比较好想 除法变乘法, 从小到大枚举 a中没有出现过的k, 对每一个数看他 ai*k--ai*(k+1)-1, 中间是否有数 (用树状数组维护即可) 这里用前缀和查询就可以O1 当 ai*k> c break即可 发现描述的过程就是调和级数nlogn 复杂度, 注意这里 n和c的 和 都 阅读全文
posted @ 2022-11-02 14:56 VxiaohuanV 阅读(36) 评论(0) 推荐(0) 编辑
摘要:题目大意: 思路: 这题难点在于每一秒会恢复值而且(mi+ri,ci) 有一个阈值. 发现 一个点被清理后, 他的恢复有3个状态, 一次恢复 ri的值, 当 t<ci/ri, 恢复 ci%ri值 当t=[ci/ri ]+1(且是除不尽时) ,然后就时恢复 0, 当t>前面的时间 又发现 总共恢复的时 阅读全文
posted @ 2022-10-26 11:13 VxiaohuanV 阅读(48) 评论(0) 推荐(0) 编辑
摘要:题意: 思路: 是图论, 看给出的信息能不能构成一些特殊的图 本题就是 不相交的环, 每次拆分可以变成 不相交的环+ 链 环的匹配就是 点数/2, 链也是 点数/2(向下取整) 要求很多个区间贡献问题: 利用每一个元素对区间的贡献. 枚举每一个环, 然后把环才成所有的链, 对于每一个链分别处理. 阅读全文
posted @ 2022-10-25 11:34 VxiaohuanV 阅读(28) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给定一个长度为 2^n,只包含小写字母的字符串 ss。 你可以将字符串的下标全部异或一个 [0,2^n) 的整数 k,即构造一个与 s 等长的新字符串 t,使得 t_i​=si⊕k​。 最小化 tt 的字典序,并输出字典序最小的 tt。 1<=n≤18 思路: 观察: 一个数来异或下标后 阅读全文
posted @ 2022-10-19 10:31 VxiaohuanV 阅读(20) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给你一个 序列 an , 你可以进行操作, 将ai 变成任意一个数字, 问你将这个序列弄成等差数列,需要的最小操作次数, n为10^5, ai 1-10^5. 思路: 直接搞不好下手, 考虑转化题意 ai + d*i, 有多少个这样相同的数 , 枚举D就行了, 用桶存每一个位置的数就行了 阅读全文
posted @ 2022-10-18 10:45 VxiaohuanV 阅读(30) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给你n个点, 每一个点都是一个整数, 然后给你 n-1个关系, i j x y, ai/aj= x/y ,问你 怎么给每一个点赋整数值, 使得每一个关系都成立, 求出最小的点和 思路: 看到 n-1, 和 2个点之间的关系, 就要考虑建图, 建树图 然后 点和点之间 x/y 相当于是一个 阅读全文
posted @ 2022-10-18 09:15 VxiaohuanV 阅读(17) 评论(0) 推荐(0) 编辑
摘要:题意: 给你n所大学, 给你m种类型的排名, 问你有每一所大学可以比其他多少个大学大, 将所有排名都累计上 思路: 一开始想用bitset做, 但是空间爆了 根据题意来建图, 转化为图论题 比某所大学大, 就建立一条有向边, 一种排名,就是一种链, 信息是可以根据链地推的, 就不用, 一个点和每一个 阅读全文
posted @ 2022-10-17 09:30 VxiaohuanV 阅读(34) 评论(0) 推荐(0) 编辑
摘要:题目大意: 你有一个答案, 每次二分分, 如果是奇数,一边就是偶一边就是ji, 分n-1次, 给出你结果 队列, 问你这个分法是否存在 思路: 正序想法就是 一步一步和起来,但是过程不好处理 正着不好就逆着, 总的n是可以知道的,然后开始/2, 遇到队列里面有的,就删除, 看能不能删完, 除了 n- 阅读全文
posted @ 2022-10-15 20:27 VxiaohuanV 阅读(22) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给你一个全连接的图, 边权为 1-k, 然你构造出一个, 图 使得 1到其他节点的菊花图,为最小生成树. 问有多少种 思路: 先考虑如何构造. 反向思考, 此时这个菊花图是一个最下生成树, 如何让他不是, 那么就是 某个点到其他点的权值比他到1号点的权值小, 所以就是那个啥. 如何计算种 阅读全文
posted @ 2022-10-13 20:03 VxiaohuanV 阅读(17) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给出n个类型的魔法, 每个魔法需要可以给敌人造成伤害,给自己弄血,但是需要花费Ci, 给你 X个金币, 询问m次, 给出怪兽的 血和攻击, 问 最少许需要多少金币才可以杀死他.(你不能被杀死,, 一次询问,只能买一种类型的魔法 思路: 更具题目, 将 攻击和血量 x起来, 看出w, 花费 阅读全文
posted @ 2022-10-13 19:52 VxiaohuanV 阅读(33) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给出一个满的二叉树, 然后 各个节点是 A||B, 每一个节点的左右儿子树可以交换,问前序遍历后的 字符串有多少种情况 思路: 明显的 树贡献问题 贡献式子: f[l]*f[r]*2,(会交换顺序嘛) 但是左右完全相同时, 就不能x2, 如何判断左右如何相同, 就提前弄哦一个 前序遍历的 阅读全文
posted @ 2022-10-11 09:30 VxiaohuanV 阅读(67) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给出 一个数组A , 然后 一个 1到x 的所有数, 让你 把 这些数插入到A里面, 使得 插入后的序列 ai和ai+1 绝对值差 的和最小, 求出这个最小值即可 思路: 要素察觉: 相邻2数的绝对值之差, 求这个和最小, 可以把 a 这个数 的图 画出来,(相邻2数的绝对值之差一般通过 阅读全文
posted @ 2022-10-11 09:17 VxiaohuanV 阅读(38) 评论(0) 推荐(0) 编辑
摘要:给定一个数组 a,(1≤n≤5×105),你需要将其分割为若干个连续的子数组,使所有子数组的价值总和最大。 定义价值是: r-l+1,和 >0 0, 和=0 -(r−l+1), 和<0; 思路: 首先这道题初步想的时候 考虑到贪心和dp 贪心贪不出来,就马上转dp 直接暴力想 是 n^2 那么就要考 阅读全文
posted @ 2022-10-11 08:29 VxiaohuanV 阅读(36) 评论(0) 推荐(0) 编辑