随笔分类 - C题
摘要:思路: 发现直接去存所有的数,一定会超时超空间 那么如何去get到某个数呢? 二分 (遇到第K大, 一般也是利用二分处理) 二分某个数看他是 第几大, 枚举ai ,然后判断相应的bi有多少个, 这里在线直接判断bi是logn的 因此要先预处理,利用捅记录数的次数然后利用前缀和处理, 这样就是 O1的
阅读全文
摘要:数据范围 L-R<=1e18 思路: 稍微一想就可以知道, 3-friendly 的数其实很多的 然后这些想想这这些情况, 被3整除利用 各个位数相加可以被3整除 然后利用 取模 优化, 1 2 ,发现: 1 1 , 2 2 ,1 ,2 是不可以的 111 ,222 ,12 , 21 都是可以的,
阅读全文
摘要:用于: 统计数位于数位的相关信息的计数问题, 通常会问在某个区间内, 利用减法思维,这样就会减少一个边界的判断 此时就会只有一个边界, 这个边界 利用 lim 处理, 在暴力枚举的时候不要超过lim 就行了 记忆化搜索递归的过程, 就是一个完全的暴力, 不过有记忆化搜索, 所以他的时间复杂度是 DP
阅读全文
摘要:思路: 看到数据范围很小, 暴力, 不是n^n 暴力,而是 利用next_permutation(p+1,p+1+n); n!去实现这个东东 do .... while(next_permutation(p+1,p+1+n)); 牛逼, 这个只能用数组,不能结构体,于是就新建一个这个数组然后去映射就
阅读全文
摘要:思路: 关键是操作2的性质: 随机找->找一个路径最长的点 操作1,阻止建边顾名思义, 发现和最短路很想, 从n到每一个点的权值嘛 改变权值更新方式, 边的权值为: val[i]+前面那个点是第几大的, (这里每一个出度的点都要算) ->满足题目要求 然后 这个第几大,利用出度来优化, 更新一个后就
阅读全文
摘要:思路: 关键性质是赋值是由跟到某个点,然后权值是不减序列 从叶子节点进行回推, 由于是不减序列,而且为了然后父亲节点能够白嫖,于是让儿子节点的权值尽量大就行了, 然后就看父亲点能不能白嫖, 不能操作就+1.
阅读全文
摘要:博弈题 都可以搜索做 (不考虑时间复杂度时) 发现3x3可以接受, 用记忆化搜索优化一下 情况通过hash思想得到 直接就 3进制去get (不用去mod)
阅读全文
摘要:题目大意: 给出一个树, 每一个节点有一个 ai值 和bi值
阅读全文
摘要:思路: 第一眼看到这个题,就准备直接用莫队去做, 每一次l ,r 第一次遇到一个数的次数是奇数就不做处理, 之后就要^异或一下来处理, 次数是偶数本来就要处理, 就不用说了, 这样就符合题意 不过出题人,把莫队卡掉了 首先可以根据异或性质 把问题转化为 A 通过前缀思想处理 B通过对询问排序后处理
阅读全文
摘要:后记; 先贪心的想想能在n内构造出的情况是什么样子的 用特殊数字去构造, 或者暴力打一个表, 来观察规律
阅读全文
摘要:思路; 遇到数学公式,一层一层剥开 发现 那个式子就是 求 n 内的 每一个数 的倍数在n 以内的数量, 明显数论分块来处理这个问题 然后就是 因子的^2, ^3 , 这个子问题 1^3+2^3+3^3+……+n^3 = [n(n+1)/2]^2 取模 2^64, 直接用 unsigned long
阅读全文
摘要:思路: 题目性质: 将往上走没有收益的, 往下走也没有收益 (除非下面刚好有一个) 然后就考虑左右的清空, x轴, y轴为时间 , 然后 两两 之间可以到达时(赶在后面时间之前)来连一个边 按时间从小到大排序 DP[i] 表示 选i时吃的最多的兵 DP[I]= MAX(DP[J])+1 , j 是可
阅读全文
摘要:因为A,B长度相等, 明显要去以这个为单位长度去处理 然后 发现 1,2,,3,4... 满足调和级数 nlongn的复杂度,
阅读全文
摘要:思路: 性质一直都是1,N 的满区间 前面3个直接利用值域线段树即可 后面一个就利用优先队列存被改的数,然后暴力恢复就行, 因为最对被改m次嘛\\ #include<bits/stdc++.h> using namespace std; #define ll long long const ll m
阅读全文
摘要:提取性质: 关键: 改完一个点,就不能恢复 2个点在一起 一定不能改 于是根据上面2点,枚举每一个点 看看这个点需不需要改,如果要改就建一个边就行了, 然后拓扑序一下 另外的思路:
阅读全文
摘要:思路: 通过题目就可以转化题意为: 让 pi!=i &&pi !=ai 发现合理的队列很多,就通过随机数去产一个队列出来 shuffle: random_device gen; mt19937 rd(gen()); shuffle(p+1,p+1+n,rd); #include<bits/stdc+
阅读全文
摘要:思路: 有检测时 偶数分成2个奇数最优 奇数 一偶一奇 没有检测时 就每一只放在一个笼子里面
阅读全文
摘要:法一: 贪心得缩小调价: 让每一个矩阵的值都是一样的 性质: 捞捞利用位运算的性质, 每次+4, 因为4是二ni次, 就是一直在某个位上面加一个东西 然后在第排的时候,加入新的数的时候,发现可以直+ 1<<(lg2m +1) 然后剩下的位保持不变和上面一样就行 最高位两两异或一定是可以^约掉; 法二
阅读全文
摘要:别人的思路; 对于第一个问题求最小: 尽可能让连续的2个1放一个房间就行,最多m/4 对于第二个问题: 尽可能让不是11连续的位置为 double公寓, 因为每有2个1就会减少一个 ans,(先想出所有的1然后利用减法思维,很巧妙) 2个2个判断的时候 +2的思想很妙 #include<iostre
阅读全文
摘要:大佬的思路: #include<bits/stdc++.h> using namespace std; int n,k,l[200010],r[200010],pos[200010]; char c[200010]; vector<int>seq; void precalc(int u) { if(
阅读全文