CF R 639 div2 F Review 贪心 二分】的更多相关文章

LINK:Résumé Review 这道题让我眼前一亮没想到二分这么绝. 由于每个\(b_i\)都是局部的 全局只有一个限制\(\sum_{i=1}^nb_i=k\) 所以dp没有什么用 我们只需要满足他们的累和=k即可. 容易想到每次给b加1带来的贡献是 \(\Delta_x=a_i-3{b_i}^2-3b_i-1\) 开一个堆每次取出最大值 这样显然是最优的. 不过复杂度为klogn k足足有1e14这么大. 一个绝妙的想法 每次增加的值是递减的 那么第k次增加的值也是固定的. 可以进行二…
LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z<=y<=z,y<=x<=z... 6种情况 考虑 y<=x<=z 观察这个形式 枚举x 发现y在<=x中显然取较大的那个更优 证明的话 x不变 在z不变的情况 y在符合条件的情况下自然 越小越不优 再讨论z越大的问题 再讨论y z一个变小一个变大的情况 综上可以发现 y z…
LINK:Independent Set 题目定义了 独立集和边诱导子图.然而和题目没有多少关系. 给出一棵树 求\(\sum_{E'\neq \varnothing,E'\subset E}w(G(E'))\) \(w(E)\)表示一张E的独立集的个数.E'为边诱导子图. 在这棵树中 边诱导子图的个数为\(2^{n-1}-1\)除掉空集. 还是利用儿子来表示每一条边选了没有 这样可以实现断边的问题. 所以有由于此时独立集的数量只要在知道集合的最大独立集个数时才能O(1)求出 但是个数有很多 还…
LINK:Divisor Paths 考试的时候已经想到结论了 可是质因数分解想法错了 导致自闭. 一张图 一共有D个节点 每个节点x会向y连边 当且仅当y|x,x/y是一个质数. 设f(d)表示d的约数个数 那么x->y的无向边的边权为f(x)-f(y); 每次询问两个点x,y之间的最短路径的条数有多少条,保证x|D,y|D. 不妨假设x>y.当y|x时容易发现y只需要每次在保证次数大于x的质因子上不断将自己本身的一个质数因子去掉即可. 不难发现 此时最短路长度为1 因为不管中间去的方式如何…
赛后看了半天题 才把题目看懂 英语水平极差. 意思:定义一个集合S的权值为max{gcd(a,b)};且\(a\neq b\) 这个集合可以从1~n中选出一些数字 求出当集合大小为k时的最小价值. 无法二分 考虑构造. 考虑一种简单的情况 1~n的中gcd(a,b)最大为多少 可以发现我们只需要枚举i 看一下i/i的最小质因子的最大值即可. 所以是从质因子分解的层面考虑比较简单. 可以发现 当两个数字质因子集合有包含关系的时候 加入小的那个数到集合S之中一定不会比大的数加入集合S结果更差.(显然…
LINK:Challenges in school №41 考试的时候读错题了+代码UB了 所以wa到自闭 然后放弃治疗. 赛后发现UB的原因是 scanf读int类型的时候 宏定义里面是lld的类型导致UB. 读错题的原因是 太急了 而且题目描述不是很清晰 导致按照自己含糊不清的想法+样例的佐证 成为了另外一个题目. 这道题是要求我们进行构造. 对于一个要求我们每轮都要进行一次扭头 且刚好在k轮都进行完. (这类似于冒泡排序 但是我们不考虑冒泡排序的性质也是可以写的. 考虑 会进行多少次这样的…
cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i,j)满足l <= i <= j <= r 且 sum[j] - sum[i-1] = k\) 思路: 区间左右端点的挪动对答案的贡献符合加减性质,直接用莫队算法即可 复杂度\(O(n * sqrt(n) * log(maxsum))\) 过高 考虑先离散化预处理出所有位置 将\(log\)去…
Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence S = {s1, s2, ..., sn} is called heapable if there exists a binary tree T with n nodes such that every node is labelled with exactly one element from the se…
#452 Div2 F 题意 给出一个字符串, m 次操作,每次删除区间 \([l,r]\) 之间的字符 \(c\) ,输出最后得到的字符串. 分析 通过树状数组和二分,我们可以把给定的区间对应到在起始字符串上的区间. 然后暴力去删字符即可(因为最多只会删掉等同于字符串长度的字符个数),总共只有 62 种字符,set 维护下位置. code #include<bits/stdc++.h> using namespace std; typedef long long ll; const int…
数组若干+手动二分一个的算法,bzoj rank8 ===============================废话分割线=================================== 我我我我我!一定要说一下我的心路历程!我只用了几个数组和一个手动二分!在洛谷和bzoj都过了所以应该是对的!(跑的挺快甚至和学长合了影 事情是这样的,我首先在洛谷瞎贪心贪了55,然后调不出来去看正解,发现好麻烦啊,同时觉得我的贪心还挺对的,于是搞了一份标程拍,拍着拍着就拍出错了,发现判断字典序不太对,我…