08 2024 档案
摘要:原题链接 题解 题意:找出最大的 X 使得 na+mb=X 其中n,m中至少有一个为负数。 由于a,b互质所以n,m一定有解,即X可取任意整数。 因为n,m至少一个为负数,贪心的想最大的X一定在n=-1或者m=-1的情况。 分类讨论,n=-1时,原式子等价于-a+mb=X,此时m最大取a-1(理由见
阅读全文
摘要:原题链接 题解 着重点:分类讨论+二分中位数 首先,由于要求中位数,我们先将数组进行排序;接着我们取遍所有的ai及其对应中位数。 此时,分歧产生,我们有k次增值的机会,是加到ai(不会改变中位数)上 还是 增值后改变中位数(此时中位数可能改变)? 显然,我们要分类讨论 情况一:我们加到选取的ai上,
阅读全文
摘要:原题链接 题解 本质:贪心+dp 首先当我们面对一个矩形时,肯定是不停的枚举其最小边使得score上涨。 为什么面对多个矩形不行呢?我们可以注意观察到最后一组样例的答案是 35 而非36。 那么此时我们知晓了每个矩形 得到score 分的操作数 设为cost [ n ][ score ]。 接下来问
阅读全文
摘要:原题链接 题解 解法一:三维dp,dp[ root ][ j ][ k ] 含义,以root为根结点的树中只在前 j 棵子树 中选 k 门课程的最大学分。 code #include<bits/stdc++.h> using namespace std; int n,m; int val[305],
阅读全文
摘要:原题链接 题解 首先,位运算很容易想到按位枚举。而这道题的关键是如何快速求区间异或和。 对此,我们构建一个后缀异或数组即可,甚至这个数组可以进一步优化为 cnt1和cnt0 两个变量。(具体实现看code理解) code #include<bits/stdc++.h> using namespace
阅读全文
摘要:原题链接 题解 这题用到的知识点很多, 思维+前缀异或+容斥原理。 1、题目告诉我们要找 被除数个数 是偶数个的异或和,那么什么数的 被除数 有偶数个? 答案:非完全平方数。 2、非完全平方数太多了,不好求。而我们又知道 所有序列 个数为(n+1)*n/2 所以我们只要求出序列异或和为完全平方数的个
阅读全文