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…
Xenia and Colorful Gems 题意 给出三个数组,在每个数组中选择一个数字x,y,z,,使得\((x-y)^2+(y-z)^2+(x-z)^2\)最小. 思路 我们假设x<=y<=z 枚举所有的数作为y时,可以取得的最小值. 具体实现:使用vectorvec[4]存三个数组里的数字. 定义一个数组arr[]={1,2,3},对它进行全排列,每次枚举vec[arr[2]]里的元素作为y,vec[arr[1]]里的元素作为x,vec[arr[3]]里的元素作为z. x取第一个&l…
题意 给你3个数组\(a, b\)和\(c\),最小化\((x-y)^2+(y-z)^2+(z-x)^2\),其中\(x \in a, y \in b, z \in c\). 解题思路 这题其实第一眼就秒了,但是赛中突然不相信自己的直觉,然后就想复杂了. 就很气,本来30min前能过得题被我硬生生拖到了1h+. 解法简单的说,就是固定\(x\),然后分别在\(b\)和\(c\)中找出\(x\)的前驱和后继,然后两两组合,所有情况的最小值就是答案. AC代码 #include <bits/stdc…
LINK:Kaavi and Magic Spell 一打CF才知道自己原来这么菜 这题完全没想到. 可以发现 如果dp f[i][j]表示前i个字符匹配T的前j个字符的方案数 此时转移变得异常麻烦 状态转移一次变成了O(n). 会超时 而且这个状态的转移也是不正确的 可能当前的S字符串后面放了一些不能匹配的东西 但是此时却体现不出来. 那我们如何描述每次增加一个字符且和T匹配多少这种状态呢. 一个思路 先对于S串的某个i暴力枚举 其对应在T中的位置 这样的话dp就变成了 f[i][j][k]表…
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: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轮都进行完. (这类似于冒泡排序 但是我们不考虑冒泡排序的性质也是可以写的. 考虑 会进行多少次这样的…
LINK:Independent Set 题目定义了 独立集和边诱导子图.然而和题目没有多少关系. 给出一棵树 求\(\sum_{E'\neq \varnothing,E'\subset E}w(G(E'))\) \(w(E)\)表示一张E的独立集的个数.E'为边诱导子图. 在这棵树中 边诱导子图的个数为\(2^{n-1}-1\)除掉空集. 还是利用儿子来表示每一条边选了没有 这样可以实现断边的问题. 所以有由于此时独立集的数量只要在知道集合的最大独立集个数时才能O(1)求出 但是个数有很多 还…
给定三个数组a,b,c. 要求从每个数字取一个数,使得两两之差和最小. 求出这个数. \(我又懵逼了.我是会O(n^3)的暴力啊,怎么办.\) \(\color{Red}{从结果看,选出来的三个数必定存在a<=b<=c}\) 能不能固定一个数或两个数来确定其余数来降低复杂度呢?可以的. 固定b,然后在其他两个数组中找a和c. \(a一定是刚好小于等于b的,c一定是刚好大于等于b的.\) 那就开始二分吧....... 不过,每个数组都可以作为最小,中间,最大三种可能,所以我们有\(C_3{2}\…